我使用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轨道应用程序。