"从应用程序收到的不完整响应"来自nginx / passenger

时间:2015-03-24 19:18:50

标签: ruby-on-rails nginx passenger

我尝试通过capistrano在nginx和ubuntu上部署我的rails应用程序,就像页面https://gorails.com/deploy/ubuntu/14.04上的教程一样。 但最后我得到一条错误信息:

Incomplete response received from application

在我的浏览器中。 这可能是乘客的错误,但我怎么能弄明白该怎么办?

9 个答案:

答案 0 :(得分:122)

您的rails_env制作没有必要的设置,可能缺少secret_key_base。

打开/etc/nginx/sites-available/default并将rails_env更改为开发:

rails_env production;
        to
rails_env development;

如果应用程序正在加载,则不是乘客问题。

生产解决方案:

  1. 输入您的应用根
  2. 运行:rake secret
  3. 复制输出
  4. 转到/yourapp/config/secrets.yml
  5. 设置生产secret_key_base
  6. 重新启动乘客应用程序:

    touch /yourapp/tmp/restart.txt
    

答案 1 :(得分:24)

发生此错误是因为您没有设置secret_key_base。请按照以下步骤进行修复:

转到您的rails应用程序目录

cd /path/rails-app

生成密钥库

rake secret RAILS_ENV=production

设置环境变量

SECRET_KEY_BASE=<the-secret-key-base>

重新启动Rails应用

touch /path/rails-app/tmp/restart.txt

答案 2 :(得分:5)

对于使用乘客的人:

•导航到项目的根目录。

•运行bundle exec rake secret RAILS_ENV=production

•复制输出,然后运行sudo nano config/secrets.yml

•在production下,将secret_key_base的值替换为最近复制的佣金秘密。

•按CNTRL+X,然后按y,然后按enter

•运行passenger-config restart-app并选择您要重新启动的应用。

https://www.phusionpassenger.com/library/admin/apache/restart_app.html

答案 3 :(得分:4)

周末我遇到了这个问题(事实证明我的乘客和红宝石版本之间存在不兼容性)。

但是,似乎没有人提及:实际错误可能会出现在/var/log/apache2/errors.log 中,而不是在任何自定义日志中。

一旦你知道了,希望你的搜索会更容易!

更新,因为我需要再次参考这个 - 这也适用于nginx - /var/log/nginx/error.log在这种情况下是你的朋友!

答案 4 :(得分:3)

在我的情况下,这是因为我的服务器间歇性地耗尽了RAM(在PDF生成期间)。生成PDF后,某些RAM已恢复,错误将消失。

我有一台带有500M RAM的ubuntu服务器。

added some swap space,这个错误消失了。

答案 5 :(得分:0)

可能我的答案不在话题,但是当我的数据库mysql服务器没有运行时,我也遇到了这个错误。以防有人有同样的错误。

所以start/restart您的数据库可能是另一个答案。

答案 6 :(得分:0)

这意味着您的rails应用程序在真正进入rails本身之前就已陷入困境。这可能是中间件中的一个例外,缺少ENV密钥,这在操作系统级别上是存在的。

尝试先在本地启动应用程序,然后执行操作以获取生产中的错误。如果一切正常,请检查所有日志。检查nginx日志,您的乘客日志,最后检查与启动和运行您的应用有关的所有其他特定于操作系统的日志。

答案 7 :(得分:0)

是否有像我这样的人在上传文件后出现此错误?

我的解决方案是检查文件名,其中可能包含一些特殊字符,例如`[(〜

只需将其删除,然后再次上传文件即可。

祝你好运〜

答案 8 :(得分:0)

我仅在测试服务器上而不在生产环境中得到了此信息,因为我正在请求一个不存在的URL,并且我猜想在测试环境中,Rails会引发错误而不是返回404响应。