【发布时间】:2019-02-26 05:01:16
【问题描述】:
我在 Elastic Beanstalk 中有一个堆栈,运行“在 64 位 Amazon Linux/2.8.3 上运行 Ruby 2.5 的乘客”映像。 Rails 是 v5.2.1。希望使它成为一个临时环境,即让“Rails.env”返回“staging”并运行 staging.rb 配置。问题是,无论我做什么,它似乎都在“生产”运行。
- 我将 RACK_ENV 和 RAILS_ENV 设置为 EB 配置变量,均设置为“暂存”。我用 'printenv' 作为 ec2-user、webapp 和 root 确认了它们在服务器上的存在。
- 我尝试将Passenger 配置中的passenger_app_env 更改为“staging”。我已通过使用 'ps aux | 查看流程确认Passenger Standalone 正在使用正确的配置。 grep 乘客”。
- 我尝试切换到根服务器并手动执行“/etc/init.d/passenger stop”然后“启动”,打印输出确认Passenger 正在启动,其“环境”设置为“暂存”:
================ Phusion Passenger 独立网络服务器已启动 =============== PID 文件:/var/app/support/pids/passenger.pid 日志文件:/var/app/support/logs/passenger.log 环境:舞台 可通过以下方式访问:http://0.0.0.0/ 在后台作为守护进程服务。 问题?检查 https://www.phusionpassenger.com/documentation/Users%20guide%20Standalone.html#troubleshooting
-
我将它放入 environment.rb 并添加了一个 EB 配置变量以使 STAGING 为“真”。:
if ENV['STAGING'] %w(RACK_ENV RAILS_ENV).each do |key| ENV[key] = 'staging' end end
但是,我在 Rails 应用程序中创建的测试页面仍然显示“Rails.env”是“生产”,并且没有使用“staging.rb”中的值。然而,同一个测试页面显示 'ENV['RACK_ENV']' 和 'ENV['RAILS_ENV'] 都设置为 'staging'。
在这一点上,我不知道如何以任何其他方式强制环境。
【问题讨论】:
-
在
config/evnments.../staging.rb中创建一个临时文件,然后出于测试目的从development.rb复制到staging.rb。然后转到 EB,进入您的应用程序/配置/软件并将环境更改为RACK_ENV到staging。不要忘记重启你的应用和 nginxservice nginx restart -
已经有一个 staging.rb,并且 RACK_ENV 已经设置为 'staging'。出于某种原因,Web 层仍然会耗尽 production.rb;打开 Rails 控制台很好,这说明它正在登台。这只是网络服务器的问题。
标签: ruby-on-rails passenger amazon-elastic-beanstalk