我正在使用 Passenger + Nginx 来运行 Rails 应用程序。如果我使用“rails_env development;”,应用程序运行良好。
但如果我在生产模式下运行,我会收到“很抱歉,但出了点问题。”。
我确实运行了 db:migrate 进行生产,并且可以正常访问数据库。
奇怪的是,我没有在日志(nginx 和 rails one)中得到任何新条目,并且我确保 nginx 用户可以在其上写入。
如果我运行 rails 控制台生产,它运行良好:
# rails console production
Loading production environment (Rails 3.2.0)
1.9.3-p125 :001 >
知道可能发生了什么吗?我还应该检查什么?
- - 编辑 - -
在 @BenLee 建议将 passage_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 ]
我搜索了有关此错误的信息,但仍然没有找到解决方案。Watchdog 似乎存在并且位于正确的位置:
# 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,它就会正常启动。但原来的问题又出现了,应用程序无法在生产模式下运行。
答案1
这看起来可能是某种文件损坏,可能位于其中一个代理中。有一件事可能会有所帮助,那就是重新安装代理的最新版本。您可以通过乘客独立包执行此操作。
为此,首先通过 SSH 进入服务器,然后在任意目录中(在下面的示例中,我假设是您的主目录,但任何目录都可以)运行:
passenger package-runtime
这似乎需要进行大量的下载、配置和安装,但不要惊慌。只需将 Passenger 独立版本安装在名为 的子目录中即可passenger-standalone
。运行此命令后,您应该会看到如下文件结构(假设您在主目录中运行该命令):
+ /home/you
+ passenger-standalone
+ 3.0.11-....
nginx-x.y.z.tar.gz
support.tar.gz
因此,它只是一棵树,其中包含两个 tar.gz 文件(请注意,3.0.11-...
不是文字,而是以该字符串开头 - 全名取决于系统;同样,x.y.z
其中一个 tar.gz 文件中的 实际上是版本号)。接下来,解压 support.tar.gz,执行如下操作:
cd passenger-standalone/3.0.11-....
tar xzvvf support.tar.gz
这将提取到当前目录。除其他事项外,它将创建一个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
答案2
尽管 Fernando 似乎已经通过更新代理解决了该问题,但我遇到了类似的问题,但有另一种解决方案。
我在使用乘客和 nginx 时也遇到了这种情况。设置后一切正常rails_env 开发;在 nginx.conf 中。但是,当将开发更改为生产时,它不再起作用,并且尝试从浏览器连接时连接被拒绝。无论如何,问题出在 production.rb 文件中,行
config.force_ssl = true
当我注释掉它时,应用程序在生产中运行。我没有在 rails 应用程序中配置 ssl,而是在 nginx.conf 中配置。
希望这可以帮助其他人使用 Passenger 和 nginx 设置 Rails 应用程序。