Maciej Katafiasz <mathrick@gmail.com> wrote:
+---------------
| I'm looking for an option to trampoline into a long-running Lisp process
| with a small CGI handler. Ideally, the trampoline would simply speak the
| mod_lisp protocol, which would allow servers that already know mod_lisp
| (ie. almost all of them) to be run unmodified. The usage scenario is
| having Lisp serve content on hosts where I have neither privileges to
| install Apache modules nor FastCGI available, which describes very many of
| the cheaper shared hosting options.
|
| One fairly obvious solution would be to have a CGI handler version of
| mod_lisp.c, but I haven't found anything like that, and looking at the
| code, it scares me with Apache API which I have no clue about. So, is
| anyone aware of existence / capable of producing a standalone mod_lisp?
| Also, google and #lisp tell me Rob Warnock has previously mentioned using
| a "tiny C trampoline that speaks a mod_lisp-like protocol", how much
| mod_lisp-like is it (and if sufficiently so, would you be willing to
| share)?
+---------------
Well, *now* you've gone & done it!! ;-} You've *finally* forced me
to rummage around in my "nonexistent spare time" junkbox and find one
of them "round tuit" thingamabobs and add an MIT-style copyright notice
to my "cgi_sock.c" program, which is now available to all & sundry here:
http://rpw3.org/hacks/lisp/cgi_sock.c
As it says there, provided as-is, no warranty, no support. [And no
free consulting, either, so please *DON'T* send me email about it.
It'll just make me grumpy, and won't get you any help.] Though if
you have questions/comments/suggestions and you post them *here*,
somebody [maybe even me?] might respond. Criticisms of the "Why did
you do it *that* way?!?" kind will probably all be answered with this
bolierplate: "When I wrote this I was in a hurry, and it worked
well enough, so I haven't messed with it since." [It's still in use,
unchanged, on several lightly-loaded production web servers out there.]
Since you're not using my idiosyncratic CMUCL-based application server
[which is the *next* thing I need to clean up enough to release!],
you will almost certainly want to change the hardcoded location of
the application server's listening socket, which you do by defining
SOCK_PATH on the compile command line, e.g.:
cc -O -DSOCK_PATH=/var/run/my_app.sock cgi_sock.c -o cgi_sock
Install with:
cp -p cgi_sock /path/to/your/cgi-bin/
or:
cp -p cgi_sock /usr/local/www/htdocs/...some_path.../sock.cgi
Consult the source for the Apache "AddHandler" directives needed
for those two cases.
If you want to maintain protocol compatibility with with "mod_lisp",
you probably don't want to change any of the other "#define"s in the
source [but if not, observe the effect of changing SOCK_PROTOCOL to
PROTOCOL_GETENV instead of PROTOCOL_MODLISP].
And as a bonus... [sorry, no knives, no orange peelers, just more
software]... there's also a tiny/sample/debugging stub app server
that serves up a plaintext HTTP response showing you what all the
"mod_lisp" a.k.a. CGI variables were:
http://rpw3.org/hacks/lisp/cgi_sockd.c
Caveat: I haven't used this since the first week I wrote "cgi_sock.c",
so the socket paths it uses will *NOT* match the current "cgi_sock.c"
paths at all. [You have been warned.]
Enjoy!
-Rob
-----
Rob Warnock <rpw3@rpw3.org>
627 26th Avenue <URL:http://rpw3.org/>
San Mateo, CA 94403 (650)572-2607