【问题标题】:nginx passenger doesnt care about 'passenger_app_env', always runs as productionnginx 乘客不关心“passenger_app_env”,始终作为生产运行
【发布时间】:2014-07-18 05:41:24
【问题描述】:

我正在 EC2 上设置临时服务器,为 rails 3.2+ 应用程序安装了 nginx+passenger。然而,乘客坚持将其作为生产服务器运行,尽管被告知 两次 rails_envstaging

我可以从 nginx 的 error.log 清楚地看到,这表明乘客无法访问生产数据库。

这是我的nginx.conf,好吧,它的一部分:

http {
  passenger_root /var/lib/gems/1.9.1/gems/passenger-4.0.43;
  passenger_ruby /usr/bin/ruby1.9.1;
  passenger_app_env staging;

  include       mime.types;
  default_type  application/octet-stream;

  server {
    listen 80;
    server_name staging.coke-imc.com;
    root /home/ubuntu/imc-staging/public;   # <--- be sure to point to 'public'!
    passenger_enabled on;
    passenger_app_env staging;

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   html;
    }
  }
}

请指教。

【问题讨论】:

    标签: ruby-on-rails nginx amazon-ec2 environment-variables passenger


    【解决方案1】:

    我想到的唯一一件事是您以某种方式在应用程序级别覆盖了这些环境变量。也许您使用dotenv 并在那里加载RAILS_ENV 变量,也许- 只是也许,它是production? :)

    【讨论】:

    • 是的,这可能是问题所在。不久前,我们 (Phusion) 收到了来自客户的类似支持请求。结果发现其中一位开发人员在 application.rb 中硬编码了 RAILS_ENV。
    • 我的 dotenv 被设置为“staging”,但这并不重要——据我所知——dotenv 被加载到 Rails 应用程序,而不是 shell,这意味着 nginx / 乘客不会了解它。
    【解决方案2】:

    阅读我的回答here,这可能是因为您在开发、登台和生产环境中使用相同的路径。

    【讨论】:

    • 我在这台服务器上只有一个环境。生产是完全不同的,物理上不同。
    • 除了其他答案,我唯一能想到的是您最初以生产模式启动,但随后将 nginx 配置更改为暂存但没有重新启动服务器(或特别是乘客)。正在运行的进程永远不会改变它的环境,所以你必须完全重启。
    猜你喜欢
    • 1970-01-01
    • 2012-01-04
    • 2015-06-30
    • 2021-10-05
    • 2021-09-03
    • 2020-03-01
    • 1970-01-01
    • 2013-08-31
    • 2014-11-09
    相关资源
    最近更新 更多