Yo no quiero usar un modulo-extraño-de-comunicacion-de-apache-con-lisp ni nada por el estilo. Sólo quiero "Generar páginas dinámicamente con lisp y apache". La solución elegida pasa por convertir los fuentes de clisp (common-lisp) en ejecutables con chmod a+x *.lisp
y añadiendo como primera línea de los archivos:
#!/usr/bin/clisp
Así, podemos comprobar que el fichero en lisp se ejecuta correctamente:
Romeo:/home/rober# ls -l /var/www/lisp/prueba.lisp
-rwxr-xr-x 1 root root 43 2005-07-02 20:59 /var/www/lisp/prueba.lisp
Romeo:/home/rober# cat /var/www/lisp/prueba.lisp
#!/usr/bin/clisp
(format t "hola, mundo")
Romeo:/home/rober# /var/www/lisp/prueba.lisp
hola, mundo
Ahora, en /etc/apache/httpd.conf añadimos las siguientes lineas
Romeo:/home/rober# head -905 /etc/apache/httpd.conf | tail -4
Options +ExecCgi
AddHandler cgi-script .lisp
que, para una carpeta concreta, añade permisos de ejecución para los CGIs, que debe ir acompañada de los permisos de ejecución de los archivos en el sistema. Además, elige cgi-script como manejador para los archivos acabados en .lisp. Es *importante* que las primeras lineas que el script escriba por stdout (con lisp usando format o print) sean "content-type: text/html" sin las comillas, o especificar otro tipo si el script genera otra cosa que no sea html. Después, se debe dejar una línea en blanco, o sea, usar *DOS* saltos de linea en lisp: (format t "~%~%" )
después se interpreta que el resto de la salida por pantalla debe ser enviada. Podemos hacer lo mismo para los public_html de cada usuario (notese el ExecCGI en la linea Options y el AddHandler): Romeo:/home/rober# head -355 /etc/apache/httpd.conf | tail -20
UserDir public_html
#
# Control access to UserDir directories. The following is an example
# for a site where these directories are restricted to read-only.
#
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCgi AddHandler cgi-script .lisp
Order allow,deny
Allow from all
Order deny,allow
Deny from all
Para rematar añadimos index.lisp al final de lista del DirectoryIndex para que un archivo index.lisp sirva de archivo inicial si no se especifica ninguno... Romeo:/home/rober# head -363 /etc/apache/httpd.conf | tail -3
DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.lisp
Demostración de funcionamiento:
rober@Romeo:~/public_html$ ls -l index.lisp
-rwxr-xr-x 1 rober rober 106 2005-07-02 21:06 index.lisp
rober@Romeo:~/public_html$ cat index.lisp
#!/usr/bin/clisp
(format t "content-type: text/html")
(format t "~%~%" )
(format t "hola, soy rober!" )
rober@Romeo:~/public_html$ ./index.lisp
content-type: text/html
hola, soy rober!
rober@Romeo:~/public_html$ lynx --dump -nolist localhost/~rober
hola, soy rober!
No hay comentarios:
Publicar un comentario