parse_rackup_file ': arquivo rackup (config.ru) não legível (ArgumentError) Unicorn Nginx

5

Eu usei o clique com um clique Configuração de gota do Rails, NGINX, Unicorn, MySQL para criar meu servidor e não consigo fazer o Unicorn iniciar como um daemon. Aqui está o rastreamento de pilha quando eu /etc/init.d/unicorn start :

/usr/local/rvm/gems/ruby-2.0.0-p195/gems/unicorn-4.8.0/lib/unicorn/configurator.rb:659:in 'parse_rackup_file': rackup file (config.ru) not readable (ArgumentError)
from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/unicorn-4.8.0/lib/unicorn/configurator.rb:77:in 'reload'
from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/unicorn-4.8.0/lib/unicorn/configurator.rb:68:in 'initialize'
from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/unicorn-4.8.0/lib/unicorn/http_server.rb:100:in 'new'
from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/unicorn-4.8.0/lib/unicorn/http_server.rb:100:in 'initialize'
from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/unicorn-4.8.0/bin/unicorn:126:in 'new'
from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/unicorn-4.8.0/bin/unicorn:126:in '<top (required)>'
from /usr/local/rvm/gems/ruby-2.0.0-p195/bin/unicorn:23:in 'load'
from /usr/local/rvm/gems/ruby-2.0.0-p195/bin/unicorn:23:in '<main>'
from /usr/local/rvm/gems/ruby-2.0.0-p195/bin/ruby_executable_hooks:15:in 'eval'
from /usr/local/rvm/gems/ruby-2.0.0-p195/bin/ruby_executable_hooks:15:in '<main>'

Quando eu which unicorn recebo: /usr/local/rvm/gems/ruby-2.0.0-p195/bin/unicorn , que parece ser bom.

Eu tentei tudo o que posso pensar, alguns dos quais incluem:

  • Criando um wrapper RVM = > %código%
  • No bin path suitable for lining wrapper. Try setting 'rvm_bin_path'. = > Falha ao criar extensões nativas ... (para sudo gem install unicorn / usr / bin / ruby1.9.1 'para o extconf.rb. Eu nunca toquei em uma versão do Ruby menor que 2.0.
  • kgio 2.8.1). It's looking in = > Um monte de erros de permissões de arquivo. O RVM não reconhece o que rvm remove 2.0.0-p353 significa. Me bate ...
  • Entrando em contato com DigitalOcean = > Eles disseram para ir perguntar 'a comunidade'.
  • Seguiu vários outros tutoriais & amp; sugestões sobre links simbólicos, colocando informações relacionadas ao PATH em arquivos de configuração e muito mais. Nada funcionou.

Funciona bem se eu iniciá-lo em segundo plano ( sudo switch), mas os processos ainda são mortos quando eu me desconecto do terminal. Eu estou simplesmente sem ideias e estou nisso há dois dias.

Deixe-me saber se você deseja que eu poste qualquer trecho de arquivo ou execute comandos. Eu não queria preencher este post com informações supérfluas.

Me ajude, AskUbuntu, você é minha única esperança ...

* EDIT: * -D

set -e
NAME=unicorn
DESC="Unicorn web server"

. /lib/lsb/init-functions

if [ -f /etc/default/unicorn ]; then
  . /etc/default/unicorn
fi

export PATH=/usr/local/rvm/gems/ruby-2.0.0-p195/bin:$PATH
export GEM_HOME=/usr/local/rvm/gems/ruby-2.0.0-p195
export GEM_PATH=/usr/local/rvm/gems/ruby-2.0.0-p195:/usr/local/rvm/gems/ruby-2.0.0-p195/gems:/usr/local/rvm/gems/ruby-2.0.0-p195@global/gems

DAEMON=/usr/local/rvm/gems/ruby-2.0.0-p195/bin/unicorn

PID=${PID-/run/unicorn.pid}

run_by_init() {
    ([ "${previous-}" ] && [ "${runlevel-}" ]) || [ "${runlevel-}" = S ]
}

exit_with_message() {
  if ! run_by_init; then
    log_action_msg "$1 Not starting."
  fi
  exit 0
}
check_config() {
  if [ $CONFIGURED != "yes" ]; then
    exit_with_message "Unicorn is not configured (see /etc/default/unicorn)."
  fi
}

check_app_root() {
  if ! [ -d $APP_ROOT ]; then
    exit_with_message "Application directory $APP_ROOT is not exist."
  fi
}

set -u

    case "$1" in
      start)
            check_config
            check_app_root

            log_daemon_msg "Starting $DESC" $NAME || true
            if start-stop-daemon --start --quiet --oknodo --pidfile $PID --exec $DAEMON -- $UNICORN_OPTS; then
              log_end_msg 0 || true
            else
              log_end_msg 1 || true
            fi
                  ;;
 stop)
        log_daemon_msg "Stopping $DESC" $NAME || true
        if start-stop-daemon --stop --signal QUIT --quiet --oknodo --pidfile $PID; then
          log_end_msg 0 || true
        else
          log_end_msg 1 || true
        fi
        ;;
  force-stop)
        log_daemon_msg "Forcing stop of $DESC" $NAME || true
        if start-stop-daemon --stop --quiet --oknodo --pidfile $PID; then
          log_end_msg 0 || true
        else
          log_end_msg 1 || true
        fi
        ;;
  restart|force-reload)
        log_daemon_msg "Restarting $DESC" $NAME || true
        start-stop-daemon --stop --quiet --oknodo --pidfile $PID
        sleep 1
        if start-stop-daemon --start --quiet --oknodo --pidfile $PID --exec $DAEMON -- $UNICORN_OPTS; then
          log_end_msg 0 || true
        else
          log_end_msg 1 || true
        fi
        ;;
  reload)
        log_daemon_msg "Reloading $DESC" $NAME || true
        if start-stop-daemon --stop --signal HUP --quiet --oknodo --pidfile $PID; then
          log_end_msg 0 || true
        else
     log_end_msg 1 || true
    fi
        ;;
  reopen-logs)
        log_daemon_msg "Relopening log files of $DESC" $NAME || true
        if start-stop-daemon --stop --signal USR1 --quiet --oknodo --pidfile $PID; then
          log_end_msg 0 || true
        else
          log_end_msg 1 || true
        fi
        ;;
  status)
        status_of_proc -p $PID $DAEMON $NAME && exit 0 || exit $?
        ;;
  *)
        log_action_msg "Usage: $0 <start|stop|restart|force-reload|reload|force-stop|reopen-logs|status>" || true
        exit 1
        ;;
esac

/etc/init.d/unicorn

# Change parameters below to appropriate values and set CONFIGURED to yes.
CONFIGURED=yes

# Default timeout until child process is killed during server upgrade,
# it has *no* relation to option "timeout" in server's config.rb.
TIMEOUT=60

# Path to your web application, sh'ld be also set in server's config.rb,
# option "working_directory". Rack's config.ru is located here.
APP_ROOT=/home/rails/current/

# Server's config.rb, it's not a rack's config.ru
CONFIG_RB=/home/unicorn/unicorn.conf

# Where to store PID, sh'ld be also set in server's config.rb, option "pid".
PID=/home/unicorn/pids/unicorn.pid
UNICORN_OPTS="-D -c $CONFIG_RB -E production"

PATH=/usr/local/rvm/rubies/ruby-2.0.0-p195/bin:/home/unicorn/.rvm/bin:/usr/local/sbin:/usr/bin:/bin:/sbin:$
~

EDIT 2:

Sucesso!

Uma longa trilha de /etc/default/unicorn e CHOWNs depois (para diferentes arquivos Unicorn log & amp; pid), eu simplesmente tenho um CHMODs quando tento master failed to start, check stderr log for details mas meu arquivo /etc/init.d/unicorn/ está em branco . Rastreando mais arquivos de configuração, conduza-me a um log de erros que dizia que algum diretório unicorn / pid / era unwritable. Um pouco de unicorn.stderr.log de ação depois, tudo está bem.

Obrigado Ben!

    
por Kyle Carlson 17.01.2014 / 05:00

1 resposta

4

Quando o unicórnio - ou qualquer processo de servidor compatível com o Rack - é executado, ele precisa de um arquivo rackup ( .ru ) para informar o que fazer. Se você não aponta para um, ele não sabe o que servir. Eu diria que o script em /etc/init.d/unicorn não contém o caminho completo para o arquivo rackup do seu projeto, e ele precisa dele. A maioria dos aplicativos Rails, se não todos, já foram incluídos como parte do gerador do projeto Rails ( config.ru ).

O guia que você está seguindo o instrui a colocar seu código dentro de /home/rails e, no entanto, coloca seu arquivo de configuração em outro lugar ( /home/unicorn/unicorn.conf ). Na maioria das configurações que eu vi, o conteúdo desse arquivo geralmente reside na raiz do diretório Rails que ele serve, mas não é nada demais.

O guia tem várias configurações em um arquivo separado em /etc/default/unicorn , o que eu acho que pode ser onde está o culpado. Você pode postar a fonte desse arquivo?

    
por Ben Kreeger 17.01.2014 / 05:17

Tags