Como iniciar o Rails a partir de um script de shell no Debian?

1

Eu realmente não tenho necessidade de mexer com passageiro ou capistrano no momento. Eu simplesmente quero executar trilhos na inicialização na porta 3000. Eu tentei replicar este tutorial para o nó como tanto quanto eu poderia correr trilhos:

Eu tenho um script railsup em /etc/init.d/ que é algo como:

#!/bin/sh
export PATH=$PATH:/usr/local/bin

case "$1" in
  start)
   cd /root/rails_app; /usr/local/rvm/gems/ruby-2.0.0-p247/bin/rails server -d -p 3005
  ;;
  # starting other stuff
*)

Eu também incluí-lo com update-rc.d

Eu consegui que funcione, mas apenas se eu executar o script manualmente - ele não parece ser executado na inicialização. Existe alguma razão pela qual ../bin/rails está indisponível no arranque?

Eu imagino que há algo sobre o caminho \ rvm \ rails que eu não conheço? Existe uma maneira de usar o @reboot do crontab para isso?

    
por dsp_099 25.10.2013 / 16:07

3 respostas

1

Usando init.d

Com o novo sistema de paralelização System-V, você tem para adicionar uma parte INIT INFO no topo do seu script.

Dê uma olhada em /etc/init.d/README e tente adicionar isso no topo do seu script:

#! /bin/sh

### BEGIN INIT INFO
# Provides:          rails
# Required-Start:    $local_fs $remote_fs
# Required-Stop:
# X-Start-Before:    rmnologin
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Start Rails on port 3000
### END INIT INFO

Usando cron (e executado como seu próprio usuário)

Você pode executar o daemon em cada reinicialização com a sintaxe cron específica:

crontab -l |
   sed '$a@reboot /usr/bin/rail-or-other-bin -arg1 -arg2 -port 3000' |
   crontab

Aviso executando este comando ( crontab sem argumento e stdin from pipe) alterará seu crontab ! Veja man crontab !

... e tente isso sem o último crontab antes:

crontab -l |
   sed '$a@reboot /usr/bin/rail-or-other-bin -arg1 -arg2 -port 3000'

A vantagem disso é que o daemon é executado na userland e erros de execução serão enviados a você como e-mail pelo modo cron normal.

    
por 09.11.2013 / 16:35
0

O script está sendo executado? Eu tentaria adicionar:

echo RAILSUP >/tmp/railsup.log

Se realmente é, você verificou os logs para ver qual é o erro ao tentar executar na inicialização? Pessoalmente, eu correria isso sob strace e registraria todas as ações em um arquivo para examinar uma vez que você pudesse efetuar login. Ele provavelmente forneceria alguma pista.

    
por 06.11.2013 / 02:34
-1

realmente é, você verificou os logs para ver qual é o erro ao tentar executar na inicialização? Pessoalmente, eu correria isso sob strace e registraria todas as ações em um arquivo para examinar uma vez que você pudesse efetuar login. Ele provavelmente forneceria alguma pista.

    
por 09.11.2013 / 14:18