Passenger + nginx:应用程序不能在生产模式下运行

我使用Passenger + Nginx来运行Rails应用程序。 如果我使用“rails_env开发” 该应用程序工作正常。

但是,如果我运行在生产模式,我得到“我们很抱歉,但出了问题”。

我没有运行db:生产迁移,我可以正常访问数据库。

奇怪的是,我没有得到任何日志(nginx和rails一个新的条目),我确保nginx用户可以写在他们身上。

如果我运行轨道控制台生产,它工作正常:

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

任何可能发生的想法? 我还应该检查什么?

– – 编辑 – –

在@BenLeebuild议将passenger_debug_log_file添加到nginx.conf之后,我开始为开发和生产获取这个错误:

 # /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 ] 

我search了这个错误,但我仍然没有find解决办法。 看门狗似乎存在,是在正确的地方:

 # 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 

如果我删除passenger_debug_log_file它正常启动。 但是原来的问题又回来了,应用程序不能在生产模式下运行。

这看起来可能是某种文件损坏,可能位于其中一个代理中。 有一件事可能会帮助你重新安装代理的新版本。 您可以通过乘客独立软件包来完成。

要做到这一点,首先SSH到服务器,然后,在任何目录(在下面的例子中,我将假设你的主目录,但任何目录都可以),运行:

 passenger package-runtime 

这似乎做了大量的下载和configuration和安装,但不要惊慌。 所有要做的就是将乘客独立版本安装在一个名为passenger-standalone的子目录中。 运行这个命令后,你应该看到这样的文件结构(假设你在你的主目录下运行这个命令):

 + /home/you + passenger-standalone + 3.0.11-.... nginx-xyztar.gz support.tar.gz 

所以它只是一个有两个tar.gz文件的树(注意3.0.11-...不是字面的,而是以该string开始 – 全名是系统依赖的;类似地, xyz在一个tar .gz文件实际上是一个版本号)。 接下来,解压support.tar.gz,做这样的事情:

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

这将解压到当前目录。 在许多其他的事情中,它将创build一个包含两个新文件的agents子目录:

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

这个想法是将这些代理文件复制到原来的系统版本上,以修复系统版本中可能存在的任何损坏。 但首先,适当地设置权限。 从上面的命令离开之后,运行:

 cd agents sudo chown root:rvm Passenger* 

接下来,备份您的原始代理:

 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 

最后,在这里从独立包中移动新版本。

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

然后,重新启动nginx。 如果由于某种原因你需要撤销这个,只需要恢复备份并重新启动nginx即可。

作为一个可选的清理步骤,您不再需要这些独立文件,因此您可以像这样删除它们:

 rm -rf /home/you/passenger-standalone 

即使费尔南多似乎已经通过更新代理解决了这个问题,但我有一个类似的问题,但另一个解决scheme。

当使用乘客和nginx时,我也有一个rails应用程序的行为。 设置rails_env开发时一切正常; 在nginx.conf中。 然而,当将开发改为生产时,它不再工作,并且在尝试从浏览器进行连接时连接被拒绝。 无论如何,问题是在production.rb文件和行

 config.force_ssl = true 

当我评论说,这个应用程序在生产中工作。 而不是在rails应用程序中configurationssl,我在nginx.conf中做了。

希望这可能会帮助其他人build立一个乘客和nginx轨道应用程序。