Elastic Beanstalk、Rails 5 和 Passenger:Rails.env 沮丧

Elastic Beanstalk, Rails 5, and Passenger: Rails.env frustration

我在 Elastic Beanstalk 运行 中有一个堆栈 "Passenger with Ruby 2.5 running on 64bit Amazon Linux/2.8.3" 图像。 Rails 是 v5.2.1。我们的愿望是让它成为一个暂存环境,即 'Rails.env' return 'staging' 和 运行 脱离 staging.rb 配置。问题是,无论我做什么,它似乎都 运行ning 为 'production'。

=============== Phusion Passenger Standalone web server started =============== PID file: /var/app/support/pids/passenger.pid Log file: /var/app/support/logs/passenger.log Environment: staging Accessible via: http://0.0.0.0/ Serving in the background as a daemon. Problems? Check https://www.phusionpassenger.com/documentation/Users%20guide%20Standalone.html#troubleshooting

但是,我在 Rails 应用程序中制作的测试页仍然显示 'Rails.env' 是 'production',并且没有使用 'staging.rb' 中的值。然而,同一个测试页说 'ENV['RACK_ENV']' 和 'ENV['RAILS_ENV'] 都设置为 'staging'.

在这一点上,我不知道如何以任何其他方式强制环境。

经过多次黑客攻击后,我发现 Passenger 以 'production'(默认值)的 passenger_app_env 启动,然后切换到 'staging'。 Rails.env 会得到 'production' env 并使用 'production.rb',然后 RACK_ENV 和 RAILS_ENV 将被覆盖为 'staging',造成令人困惑的二元性。

解决方案是在 Passenger 使用的 Passenger Standalone 模板中将 passenger_app_env 指令移到更高的位置;我们将它放在 http 指令内的服务器指令内。将其移出服务器指令并移至 http 指令本身解决了问题。