Passenger + nginx: o aplicativo não é executado no modo de produção

5

Estou usando o Passenger + Nginx para executar um aplicativo do Rails. Se eu usar "desenvolvimento rails_env"; o aplicativo funciona bem.

Mas se eu correr no modo de produção, recebo "Desculpe, mas algo deu errado".

Eu fiz o db: migrate para produção e consigo acessar o banco de dados normalmente.

O mais estranho é que não recebo novas entradas nos logs (nginx e rails one) e certifiquei-me de que o usuário nginx pudesse escrever neles.

Se eu executo a produção de consoles rails, tudo funciona bem:

# rails console production
Loading production environment (Rails 3.2.0)
1.9.3-p125 :001 > 

Alguma idéia do que pode estar acontecendo? O que mais devo verificar?

---- Editar ----

Após a sugestão @BenLee de adicionar o passenger_debug_log_file ao nginx.conf, comecei a receber esse erro para desenvolvimento e produção :

# /etc/init.d/nginx restart
nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok
nginx: [alert] Unable to start the Phusion Passenger watchdog: it seems to have crashed during startup for an unknown reason, with exit code 1 (-1: Unknown error)
nginx: configuration file /opt/nginx/conf/nginx.conf test is successful
Parando o nginx:                                           [  OK  ]
Iniciando o nginx: nginx: [alert] Unable to start the Phusion Passenger watchdog: it seems to have crashed during startup for an unknown reason, with exit code 1 (-1: Unknown error)
                                                           [  OK  ]

Eu pesquisei sobre esse erro, mas ainda não encontrei uma solução. Watchdog parece existir e está no lugar certo:

# ls -lh /usr/local/rvm/gems/ruby-1.9.3-p125/gems/passenger-3.0.11/agents/
total 7,8M
drwxr-sr-x 2 root rvm 4,0K Fev 22 23:34 nginx
-rwxr-xr-x 1 root rvm 4,6M Fev 22 23:35 PassengerLoggingAgent
-rwxr-xr-x 1 root rvm 3,3M Fev 22 23:34 PassengerWatchdog

Se eu remover passage_debug_log_file, ele será iniciado normalmente. Mas os problemas originais retornam, o aplicativo não roda no modo de produção.

    
por Fernando 18.02.2012 / 15:27

2 respostas

1

Isso parece ser algum tipo de corrupção de arquivo, possibilidade localizada em um dos agentes. Uma coisa que pode ajudar é reinstalar novas versões dos agentes. Você pode fazer isso por meio do pacote independente do passageiro.

Para fazer isso, primeiro o SSH no servidor e, em seguida, em qualquer diretório (nos exemplos abaixo, assumirei seu diretório inicial, mas qualquer diretório servirá), execute:

passenger package-runtime

Isso parecerá fazer muito download e configuração e instalação, mas não se assuste. Tudo o que vai fazer é instalar a versão independente do passageiro em um subdiretório chamado passenger-standalone . Depois de executar este comando, você deverá ver uma estrutura de arquivos como esta (supondo que você tenha executado o comando em seu diretório inicial):

+ /home/you
    + passenger-standalone
        + 3.0.11-....
            nginx-x.y.z.tar.gz
            support.tar.gz

Portanto, é apenas uma árvore com dois arquivos tar.gz (note que 3.0.11-... não é literal, mas começará com essa string - o nome completo depende do sistema; da mesma forma, o x.y.z em um dos Os arquivos tar.gz serão, na verdade, um número de versão). Em seguida, descompacte o arquivo support.tar.gz, fazendo algo assim:

cd passenger-standalone/3.0.11-....
tar xzvvf support.tar.gz

Isso irá extrair para o diretório atual. Entre muitas outras coisas, ele criará um subdiretório agents com dois novos arquivos:

+ /home/you
    + passenger-standalone
        + 3.0.11-....
            + agents
                PassengerLoggingAgent
                PassengerWatchdog

A idéia é copiar esses arquivos de agentes sobre os arquivos originais do sistema, para corrigir quaisquer corrupções que possam estar presentes na versão do sistema. Mas primeiro, defina as permissões adequadamente. Seguindo de onde os comandos acima pararam, execute:

cd agents
sudo chown root:rvm Passenger*

Em seguida, faça backup de seus agentes originais:

cd /usr/local/rvm/gems/ruby-1.9.3-p125/gems/passenger-3.0.11/agents
sudo cp PassengerLoggingAgent PassengerLoggingAgent.backup
sudo cp PassengerWatchdog PassengerWatchdog.backup

Por fim, mova as novas versões do pacote autônomo aqui.

sudo mv /home/you/passenger-standalone/3.0.11-..../agents/Passenger* .

Em seguida, reinicie o nginx. Se por algum motivo você precisar desfazer isso, restaure as cópias de backup e reinicie o nginx novamente.

Como uma etapa de limpeza opcional, você não precisa mais desses arquivos independentes para poder removê-los assim:

rm -rf /home/you/passenger-standalone
    
por 27.02.2012 / 10:06
2

Embora Fernando pareça ter resolvido o problema através da atualização dos agentes, tive um problema semelhante, mas outra solução.

Eu também tive esse comportamento com um aplicativo rails ao usar passageiro e nginx. Tudo funcionou bem ao definir o desenvolvimento rails_env; no nginx.conf. No entanto, ao alterar o desenvolvimento para produção, ele não funcionou mais e a conexão foi recusada ao tentar se conectar a partir do navegador. Enfim, o problema estava no arquivo production.rb e na linha

config.force_ssl = true

Quando eu comentei isso, o aplicativo funcionou na produção. E ao invés de configurar o SSL no aplicativo rails, eu fiz isso no nginx.conf.

Espero que isso ajude alguém configurando um aplicativo rails com passageiro e nginx.

    
por 03.01.2014 / 11:15