【问题标题】:Incomplete response received from application - Passenger & NGINX从应用程序收到不完整的响应 - 乘客和 NGINX
【发布时间】:2016-10-09 04:36:12
【问题描述】:

我已经使用Passenger+Nginx成功安装了rails,但是通过网络浏览器遇到了一个不完整的响应错误:

http://tenklakes.northcentralus.cloudapp.azure.com/

我尝试rake secrets 在我的secrets.yml 文件中为production 生成一个新的secret_key_base,但没有成功。

Secrets.yml:

development: secret_key_base:c70c590cfe799087c47528016ab49a1a8e57fe2eb851639e27e2ea66f92f241a0400b3d4247e3d61a6c82818dd3988825deeb66e783ba90cfccfbc0c500d6dbd

test: secret_key_base: 08b1ebf5defee2eb1ad196e9780ae118f256c9f40f40f76674451dac4dfb1c42b75f04d22ee264644711de4e547ac8f58031e88f09c5c7223834b99230fb205c

# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

当我运行 curl http:0.0.0.0:3000 时,我从乘客那里收到以下信息:

Started GET "/" for 127.0.0.1 at 2016-10-09 04:52:43 +0000 Processing by Rails::WelcomeController#index as */* Parameters: {"internal"=>true} Rendering /home/garrett/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0.1/lib/rails/templates/rails/welcome/index.html.erb Rendered /home/garrett/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0.1/lib/rails/templates/rails/welcome/index.html.erb (2.5ms) Completed 200 OK in 10ms (Views: 6.2ms | ActiveRecord: 0.0ms)

NGINX 错误日志:

[ 2016-10-09 04:49:44.8271 45647/7fe3b30d4700 age/Cor/Con/InternalUtils.cpp:112 ]:[客户端 1-3] 发送 502 响应:应用程序未发送完整响应 应用程序 45674 标准错误:[ 2016-10-09 04:49:56.0108 45754/0x0000000092d678(Worker 1) utils.rb:87 ]: *** 机架应用程序对象中的异常 RuntimeError(缺少 secret_key_base 用于“生产”环境,设置config/secrets.yml) 中的这个值(进程 45754,线程 0x0000000092d678(Worker 1)): 应用程序 45674 标准错误:来自 /home/garrett/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0.1/lib/rails/application.rb:513:in validate_secret_key_config!' App 45674 stderr: from /home/garrett/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0.1/lib/rails/application.rb:246:inenv_config' 应用程序 45674 标准错误:来自 /home/garrett/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0.1/lib/rails/engine.rb:693:in build_request' App 45674 stderr: from /home/garrett/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0.1/lib/rails/application.rb:521:inbuild_request' 应用程序 45674 标准错误:来自 /home/garrett/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0.1/lib/rails/engine.rb:521:in call' App 45674 stderr: from /usr/lib/ruby/vendor_ruby/phusion_passenger/rack/thread_handler_extension.rb:97:inprocess_request' 应用程序 45674 标准错误:来自 /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb:152:in accept_and_process_next_request' App 45674 stderr: from /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb:113:inmain_loop' 应用程序 45674 标准错误:来自 /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler.rb:416:in block (3 levels) in start_threads' App 45674 stderr: from /usr/lib/ruby/vendor_ruby/phusion_passenger/utils.rb:113:inblock in create_thread_and_abort_on_exception'

我没有办法让这个工作正常进行 - 还有什么我应该检查的吗?

编辑:这是我在运行 'grep -r ENV *' 时得到的结果

garrett@10klakes:~/lakemag$ grep -r ENV *
bin/bundle:ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
config/database.yml:  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
config/database.yml:#     url: <%= ENV['DATABASE_URL'] %>
config/database.yml:  password: <%= ENV['LAKEMAG_DATABASE_PASSWORD'] %>
config/puma.rb:threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i
config/puma.rb:port        ENV.fetch("PORT") { 3000 }
config/puma.rb:environment ENV.fetch("RAILS_ENV") { "development" }
config/puma.rb:# workers ENV.fetch("WEB_CONCURRENCY") { 2 }
config/environments/production.rb:  # config.secret_key_base =   ENV["SECRET_KEY_BASE"]
config/environments/production.rb:  config.secret_key_base = ENV["SECRET_KEY_BASE"]
config/environments/production.rb:  config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
config/environments/production.rb:  if ENV["RAILS_LOG_TO_STDOUT"].present?
config/boot.rb:ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
config/secrets.yml:  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

test/test_helper.rb:ENV['RAILS_ENV'] ||= 'test'

【问题讨论】:

标签: ruby-on-rails azure nginx passenger


【解决方案1】:

对于production 模式,您必须设置在任何ruby 或配置文件中命名的所有ENV(环境)变量。例如,在secrets.yml 中,Rails 需要一个环境变量SECRET_KEY_BASE。你没有设置这个变量,现在 Rails 没有在production 模式下启动。

您正在使用 asure 作为托管服务提供商。所以你可以关注this post 为 azure 设置环境变量。简而言之:

在“应用设置”部分添加应用设置

您可以使用rake secret 生成新密钥并将其用于环境变量。

还有一个提示。 secrets.yml 有它的名字是有原因的。您不应发布此文件中的机密信息。

【讨论】:

  • 感谢您的回复,杰克!如果我不是在云实例中运行 Rails,而是在独立 VM 中运行,这种情况还会出现吗?
  • 是的,建议在生产环境中使用环境变量进行机密设置。这样机密设置就不会进入您的存储库。此外,它还有一些部署优势(看看12factor.net)。如果需要,您可以替换代码中的所有 ENV 条目,但我建议不要这样做。
  • 嗨,杰克。我应该查看哪些文件来解决我的问题?
  • 我不知道。在您的Rails.root 中尝试grep -r ENV *
  • 看来你必须设置 ENV["SECRET_KEY_BASE"]ENV['LAKEMAG_DATABASE_PASSWORD'] ,也许还有 ENV['PORT']
【解决方案2】:

经过大量研究,问题出在 hba_config 文件中。 md5 权限需要设置为“信任”。

我不确定此解决方案是否是“完整”修复,但它在我的情况下有效。

【讨论】:

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