为什么Passenger正在寻找临时环境?

Chr*_*ini 5 passenger amazon-web-services amazon-elastic-beanstalk

在我的Elastic Beanstalk中 - 容器选项.RACK_ENV设置为staging.

事实上,如果我SSH到EC2实例和做rails console/var/app/current/,然后键入Rails.env返回staging.

阅读http://www.modrails.com/documentation/Users指南Nginx.html#RackEnv

它表示要设置RACK_ENV变量,因为默认情况下,值为production.

你会认为一切都会有效,除了在Elastic Beanstalk日志中,它说:

[ 2013-11-18 14:28:26.4677 8061/7fb5fe01a700 Pool2/Implementation.cpp:1274 ]: [App 7428 stdout] PG::ConnectionBad (FATAL:  database "foobar_production" does not exist
Run Code Online (Sandbox Code Playgroud)

foobar_production数据库不存在,但foobar_staging确实存在.那么为什么Passenger仍然在关注生产环境,何时应该关注分期.

Ric*_*uck 4

AWS 上的这个线程似乎暗示 RACK_ENV 只能设置为“开发”或“生产”之一。

有趣的是,在我自己的测试中,当将 Elastic Beanstalk 环境配置为 时RACK_ENV=staging,迁移将针对stagingdatabase.yml 中定义的数据库运行,但 Passenger 仍然尝试连接到数据库production

我们提出的解决方案是在应用程序下设置两个不同的“环境”,每个环境都有自己的 RDS 数据库。然后在database.yml中我们使用ENV参数在运行时连接到正确的数据库:

production:
  database: <%= ENV['RDS_DB_NAME'] %>
  username: <%= ENV['RDS_USERNAME'] %>
  password: <%= ENV['RDS_PASSWORD'] %>
  host: <%= ENV['RDS_HOSTNAME'] %>
  port: <%= ENV['RDS_PORT'] %>
Run Code Online (Sandbox Code Playgroud)