Nginx /乘客“收到来自申请的不完整回复”


68

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

Incomplete response received from application

在我的浏览器中。这可能是旅客的错误,但是我该怎么办呢?


您尝试过设置passenger_buffer_response off;吗?stackoverflow.com/q/11738924/1454117

7
@Avilyn乘客作者在这里。passenger_buffer_response_off与他的问题无关,也无济于事。很久以前,响应缓冲代码中存在一个错误,但是该错误早已得到修复,因此您发布的StackOverflow帖子中的解决方案不再适用。
2015年

@Hongli感谢您的澄清。

3
你好,我修好了。这是因为在本教程中,他们错过了secrets.yml中的“ <%= ENV [“ SECRET_KEY_BASE”]%>””环境变量!
多汁

Answers:


127

您的rails_env生产不需要设置,可能缺少secret_key_base。

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

rails_env production;
        to
rails_env development;

如果应用正在加载,这不是乘客的问题。

生产解决方案:

  1. 输入您的应用程序根目录
  2. 跑: rake secret
  3. 复制输出
  4. /yourapp/config/secrets.yml
  5. 设定生产 secret_key_base

重新启动乘客应用程序:

touch /yourapp/tmp/restart.txt

4
你好,我在我的虚拟服务器〜/ .bashrc中设置了<%= ENV [“ SECRET_KEY_BASE”]%>: export SECRET_KEY_BASE=12345678910111212andmore
多汁

7
试图拒绝投票... config / secrets.yml说do not keep production secrets in the repository, instead read values from the environment
Matthew Turner

3
这实际上取决于您的聪明程度:)
Yaniv Vova Alterman

9
您可以使用secrets.yml并将其添加到.gitignore文件中,以便永远不会将其填充到git provider中,或者您可以使用ENV变量,我正在使用这两种技术,一切都很好。如果您的服务器将被黑客入侵,并且黑客可以访问您的系统,那么您将密钥存储在什么地方都没关系:)
Yaniv Vova Alterman 2015年

我已经做到了,但仍然无法克服错误,我也在关注链接的教程。我甚至证实它加载没关系,发展
乔萨克

25

发生此错误是因为您没有设置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

6

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

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

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


更新,因为我需要再次参考此内容-nginx也是如此-/var/log/nginx/error.log在这种情况下是您的朋友!


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


4

就我而言,这是因为我的服务器间歇性地用完了RAM(在PDF生成期间)。生成PDF后,将恢复一些RAM,该错误将消失。

我有一台具有500M RAM的Ubuntu服务器。

添加了一些交换空间,该错误消失了。


1

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

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


0

可能是我的答案与主题mysql无关,但是当我的数据库服务器未运行时,我也收到了此错误。以防万一有人有相同的错误。

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


0

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

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

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

祝你好运


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.