【问题标题】:"Incomplete response received from application" from nginx / passenger来自 nginx / 乘客的“从应用程序收到不完整的响应”
【发布时间】: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;吗? stackoverflow.com/q/11738924/1454117
  • @Avilyn 乘客作者在这里。 passenger_buffer_response_off 与他的问题无关,也无济于事。很久以前,响应缓冲代码中存在一个错误,但该错误早已修复,因此您发布的 StackOverflow 帖子中的解决方案不再适用。
  • @Hongli 感谢您的澄清。
  • 你好,我修好了。这是因为在本教程中,他们错过了在 secrets.yml 中有一个“” 的环境变量!

标签: ruby-on-rails nginx passenger


【解决方案1】:

您的 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

重启乘客应用:

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 响应。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-04-09
                  • 2018-12-03
                  • 2019-12-04
                  • 2021-12-05
                  • 2015-08-22
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多