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仍然在关注生产环境,何时应该关注分期.
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)
| 归档时间: |
|
| 查看次数: |
626 次 |
| 最近记录: |