首页 > 解决方案 > Elastic Beanstalk、Rails 5 和Passenger:Rails.env 受挫

问题描述

我在 Elastic Beanstalk 中有一个堆栈,运行“在 64 位 Amazon Linux/2.8.3 上运行 Ruby 2.5 的乘客”图像。Rails 是 v5.2.1。希望使它成为一个登台环境,即让“Rails.env”返回“登台”并运行 staging.rb 配置。问题是,无论我做什么,它似乎都在作为“生产”运行。

=============== Phusion Passenger 独立网络服务器已启动 ================ PID 文件:/var/app/support/pids/passenger. pid 日志文件:/var/app/support/logs/passenger.log 环境:staging 可通过:http://0.0.0.0/ 在后台作为守护进程服务。问题?检查 https://www.phusionpassenger.com/documentation/Users%20guide%20Standalone.html#troubleshooting

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

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

标签: ruby-on-railspassengeramazon-elastic-beanstalk

解决方案


经过多次黑客攻击,我发现Passenger启动时使用了“production”(默认)的passenger_app_env,然后切换到“staging”。Rails.env 将获得“production”环境并使用“production.rb”,然后 RACK_ENV 和 RAILS_ENV 将被覆盖为“staging”,从而产生令人困惑的二元性。

解决方案是在Passenger 使用的Passenger Standalone 模板中将passenger_app_env 指令上移;我们将它放在 http 指令内的服务器指令中。将它从 server 指令中移到 http 指令本身解决了这个问题。


推荐阅读