[Seaside] Emission of static web pages?
nevin at bountifulbaby.com
Wed Jun 8 17:13:54 CEST 2005
Greg Lewin wrote:
> I've played with Seaside a bit and like the look of it, and have been
> keen on Smalltalk for a long time, which adds extra interest.
> I've looked at the documentation and don't see any obvious answers to
> While Seaside is clearly great for dynamic pages, and as a development
> environment, I've been wondering how easy it is to emit a static set
> of completely self-sufficient, stand-alone web pages which can be
> propagated to another web server. If it is easy, this would make it
> even more useful to more people - e.g. those who don't want to use
> Squeak as a web server ( i.e. commercial hosts).
> I apologise if the answer is yes and it's obvious, but I haven't seen
> it yet.
> Thanks for a very nice product.
There are many ways to do this, but be careful not to confuse what
Seaside does vs. what, say, Apache or Comanche does. Seaside requires a
web server like Apache or Comanche-- you cannot have Seaside without one
of them (or something similar to them, like Swazoo or something). And,
Apache/Comanche/whatever are perfectly capable of serving a "static set
of completely self-sufficent, stand-alone web pages" all by themselves.
Thus, since Seaside requires such a web server, then a system employing
Seaside will also automatically be capable of serving a "static set of
completely self-sufficient, stand-alone web pages", as a side-effect.
Bountiful Baby has a large mix of static and Seaside-generated dynamic
pages. Bountiful Baby actually consists of two domains: (1)
bountifulbaby.com, and (2) bountifulbaby.net. The bountifulbaby.net
domain is serviced by Apache, and just serves up static content. The
bountifulbaby.com domain is serviced by Squeak/Seaside/Comanche, and is
*primarily* dynamic Seaside pages. Thus, we can easily include a
redirect from any dynamic page to a static page, just by referencing
".net" instead of ".com" in the redirect.
To see an example of this particular technique, go to bountifulbaby.com
and look at the pictures. Check where they are located, and you will
see they are all on the ".net" domain. That's just one example of
bountifulbaby.com doing this.
The bountifulbaby.com domain also serves up some static content of its
own, via two different mechanisms, either one of which works just fine
for static content. A Seaside URL will include the string "seaside" in
the URL. Within Comanche, it is trivial to just look for "seaside" in
the incoming URL, and if it is not present, do not dispatch to Seaside,
but instead handle it the usual Comanche way. Thus...voila! Static
pages. And, Apache can do the exact same thing.
I used to use the above technique for a number things, but currently I
only use the above technique for virtual hosting. That is, if the
incoming URL does *not* include the string "bountifulbaby". For
example, http://www.smalltalkpro.com is a domain hosted by the same
Squeak/Seaside/Comanche image that is hosting bountifulbaby.com.
You can also have Seaside serve static pages for any given URL prefix,
even if it includes "seaside" in the URL, simply by caching the
generated Seaside pages in a class variable, and feeding the cached
version back anytime that same URL prefix is encountered. I use that
technique for all detected spiders. To see it, first request the
"robots.txt" page (so that the website thinks you are a spider), and
then hit the site, or hit any internal page (including the main page, if
you choose), thus:
Now, since the site thinks you are a spider, click any link or button,
and *all* you will get back are static pages. You won't get back any
dynamically generated pages *at all*.
The spider detection mechanism uses many techniques to detect spiders--
the request of a "robots.txt" page is just one of them (under the
assumption that nobody but a spider would be interested in that page).
And, after an hour or so of no access, the site will "forget" you are a
spider, and reset you.
Bountiful Baby uses all three methods mentioned above to serve static
content. And, there are yet other ways to do it, too.
More information about the Seaside