(blog ‘lucindo)

um dia eu aprendo a programar

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 ”

  1. mov Outubro 20th, 2007 16:41

    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

  2. Lucindo Outubro 20th, 2007 16:50

    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.

  3. mov Outubro 22nd, 2007 12:58

    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.

Deixe uma resposta.