来自 nginx / 乘客的“从应用程序收到不完整的响应”
Posted
技术标签:
【中文标题】来自 nginx / 乘客的“从应用程序收到不完整的响应”【英文标题】:"Incomplete response received from application" from nginx / passenger 【发布时间】:2015-05-28 06:16:18 【问题描述】:我尝试通过 capistrano 在 nginx 和 ubuntu 上部署我的 rails 应用程序,就像页面 https://gorails.com/deploy/ubuntu/14.04 上的教程一样。 但最后我收到一条错误消息:
Incomplete response received from application
在我的浏览器中。 这可能是乘客的错误,但我怎么知道该怎么做?
【问题讨论】:
你试过设置passenger_buffer_response off;
吗? ***.com/q/11738924/1454117
@Avilyn 乘客作者在这里。 passenger_buffer_response_off
与他的问题无关,也无济于事。很久以前,响应缓冲代码中存在一个错误,但该错误早已修复,因此您发布的 *** 帖子中的解决方案不再适用。
@Hongli 感谢您的澄清。
你好,我修好了。这是因为在本教程中,他们错过了在 secrets.yml 中有一个“” 的环境变量!
【参考方案1】:
您的 rails_env 产品不需要设置,可能缺少 secret_key_base。
打开/etc/nginx/sites-available/default
,把rails_env改成开发:
rails_env production;
to
rails_env development;
如果应用正在加载,则不是乘客问题。 生产解决方案:
-
输入您的应用根目录
运行:
rake secret
复制输出
转到/yourapp/config/secrets.yml
设置生产secret_key_base
重启乘客应用:
touch /yourapp/tmp/restart.txt
【讨论】:
你好,我在我的 vserver ~/.bashrc 中设置了 :export SECRET_KEY_BASE=12345678910111212andmore
很想投反对票... config/secrets.yml 说do not keep production secrets in the repository, instead read values from the environment
这真的取决于你有多聪明:)
您可以使用 secrets.yml 并将其添加到 .gitignore 文件中,这样它就永远不会填充到您的 git 提供程序中,或者您可以使用 ENV 变量,我正在使用这两种技术和一切美好的。如果您的服务器被黑客入侵并且黑客将访问您的系统,那么您将密钥存储在哪里真的无关紧要:)
我已经这样做了,但我仍然无法克服错误,我也在关注链接的教程。我什至验证它作为开发加载正常【参考方案2】:
出现此错误是因为您没有设置 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
【讨论】:
【参考方案3】:我在周末遇到了这个问题(结果证明我的乘客版本和 ruby 版本不兼容)。
但是,似乎没有人提及:实际错误可能出现在 /var/log/apache2/errors.log 中,而不是任何自定义日志中。
一旦你知道了,希望你的搜索会更容易!
更新,因为我需要再次参考这个 - 这也适用于 nginx - /var/log/nginx/error.log
在这种情况下是你的朋友!
【讨论】:
【参考方案4】:对于那些使用乘客:
• 导航到项目的根目录。
• 运行bundle exec rake secret RAILS_ENV=production
• 复制输出然后运行sudo nano config/secrets.yml
• 在production
下,将secret_key_base
的值替换为最近复制的rake secret。
• 按CNTRL+X
,然后按y
,然后点击enter
。
• 运行passenger-config restart-app
并选择您要重新启动的应用程序。
https://www.phusionpassenger.com/library/admin/apache/restart_app.html
【讨论】:
【参考方案5】:就我而言,这是因为我的服务器间歇性地耗尽内存(在 PDF 生成期间)。生成 PDF 后,一些 RAM 被恢复并且错误将消失。
我有一个 500M 内存的 ubuntu 服务器。
我added some swap space 这个错误消失了。
【讨论】:
【参考方案6】:可能是我的回答离题了,但是当我的数据库mysql
服务器没有运行时,我也遇到了这个错误。以防万一有人遇到同样的错误。
所以start/restart
您的数据库可能是另一个答案。
【讨论】:
【参考方案7】:这意味着您的 rails 应用程序在实际使用 rails 之前就已经崩溃了。这可能是中间件中的一个例外,缺少 ENV 密钥,在操作系统级别。
尝试先在本地启动应用程序,然后执行您在生产中遇到错误时所做的操作。如果一切正常,请检查所有日志。检查 nginx 日志、您的乘客日志,最后检查任何其他与启动和运行您的应用有关的操作系统特定日志。
【讨论】:
【参考方案8】:有没有像我这样上传文件后出现这个错误的人?
我的解决方案是检查文件名,该文件名可能包含一些特殊字符,例如 `[(~.
只需将其删除,然后再次上传文件。
祝你好运~
【讨论】:
【参考方案9】:我得到了这个,只在我的测试服务器上而不是在生产环境中,因为我请求的 URL 不存在,我猜在测试环境中,Rails 抛出错误而不是返回 404 响应。
【讨论】:
以上是关于来自 nginx / 乘客的“从应用程序收到不完整的响应”的主要内容,如果未能解决你的问题,请参考以下文章
nginx + 乘客 + phpmyadmin = 拒绝访问