Server lisp no unix
Uma maneira fácil de rodar o seu server feito em lisp (talvez uma aplicação web usando Hunchentoot) é com o Detachtty.
No Ubuntu ou Debian basta apenas: apt-get install detachtty
Vamos supor que sua aplicação pode ser carregada com o arquivo web-app.lisp e iniciada com (web-app:start). No linux, com SBCL pode fazer o seguinte script:
#!/bin/bash
detachtty \
--dribble-file /var/log/web-app-dribble \
--log-file /var/log/detachtty.log \
--pid-file /var/run/web-app.pid \
/var/run/web-app.socket \
/usr/bin/sbcl --eval "(compile-file \"web-app.lisp\")" \
--eval "(load \"web-app\")" \
--eval "(web-app:start)" \
Pronto, rodando o script o processo é executado como filho de init, e você pode deslogar sem problemas.
Uma coisa interessante é que com isso podemos fazer hot deploy, pois podemos conectar no processo lisp com:
$ attachtty /var/run/web-app.socket
E então, avaliar qualquer expressão, como por exemplo:
(compile-file "web-app.lisp") (load "web-app")
Depois desconectar pressionando: CTRL+\
Assim atualizamos a aplicação com downtime 0.
Mais informações sobe o detachtty na CLiki.
| Enviar por e-mail | Hits para esta publicação: 942
3 respostas para “ Server lisp no unix ”
Deixe uma resposta.
Olá Renato,
ótimo post! Eu também utilizo bastante o detachtty. Só para complementar, podemos usar o atachtty para se conectar remotamente ao socket criado pelo detachtty:
$ attachtty usuario@host.com:/var/run/web-app.socket
Uma outra vantagem lispiana é rodar um SWANK-SERVER no servidor:
(asdf:oos ‘asdf:load-op ’swank)
(setf swank:*use-dedicated-output-stream* nil)
(swank:create-server :port 4005 :dont-close t)
Para depois poder conectar a ele utilizando o SLIME. Para isso, basta criar um túnel SSH de localhost:4005 para host.com:4005:
$ ssh -L4005:localhost:4005 usuario@host.com
E então conectar na ponta local do túnel pelo SLIME (no Emacs: M-x slime-connect) em localhost:4005. Pronto, agora você terá seu Emacs plugado na sua aplicação CL remota
Mais informações sobre a conexão de SLIME com um REPL remoto em [1].
Abraços.
REFS:
[1] http://common-lisp.net/project/slime/doc/html/Connecting-to-a-remote-lisp.html#Connecting-to-a-remote-lisp
Oi Vilson!
Valeu!
Ótimas dicas!
Eu tinha falando um pouco sobre isso nesse post (http://blog.lucindo.com.br/2007/05/21/ambiente-de-desenvolvimento-lisp-sbcl-e-slime/) também.
Alô Renato!
Muito legal o outro post! Precisamos deste tipo de tips & tricks no nosso wiki no Lisp-BR! Pode ir se preparando que vou te encomodar para criarmos este tipo de conteúdo assim que tivermos a página organizada
Abraços.