我有 2 台服务器。
- Amazon EC2 - 真正的生产服务器。这是应用程序的实时版本
- Heroku - 这是我的"测试"生产服务器。一些操作是在生产服务器中进行的,然后,为了在发送到 AWS EC2 之前进行测试,我在 Heroku 中进行测试。
在文件config/database.yml
中,我有以下代码:
production:
adapter: <%= ENV['DB_ADAPTER'] ||= 'postgresql' %>
encoding: utf8
pool: 5
host: 127.0.0.1
username: my_pg_username
password: my_pg_password
database: my_pg_database
它在 AWS 中运行良好,但 Heroku 中的连接数据不同。
为了解决这个问题,我在两个服务器中都创建了一些环境变量。
在Heroku中,非常容易。我转到应用程序设置,然后在配置变量中设置名称和值。
在 AWS 中,我:
- 通过固态度登录
- 运行
sudo nano .profile
以编辑文件.profile
添加代码
export PG_DB_HOST='127.0.0.1' export PG_DB_USER='my_pg_user' export PG_DB_PASS='my_pg_password' export PG_DB_NAME='my_pg_database'
之后,我在终端中运行这些相同的代码。这样,环境变量仍然存在。
为了测试环境变量是否正常工作,我登录服务器并登录rails console
,之后,我键入变量,并正确返回值。
在文件config/database.yml
中,我更改了代码:
production:
adapter: <%= ENV['DB_ADAPTER'] ||= 'postgresql' %>
encoding: utf8
pool: 5
host: <%= ENV['PG_DB_HOST'] %>
username: <%= ENV['PG_DB_USER'] %>
password: <%= ENV['PG_DB_PASS'] %>
database: <%= ENV['PG_DB_NAME'] %>
在 Heroku 中,部署后,工作正常。
在 AWS 中,我在运行cap production deploy
时遇到错误。在任务rake db:migrate
中,我收到此错误:
01 bundle install --path /home/ubuntu/myapp/shared/bundle --without development test --deployment --quiet
✔ 01 ubuntu@XX.XX.XX.XXX 4.514s
00:27 deploy:migrate
[deploy:migrate] Run `rake db:migrate`
00:28 deploy:migrating
01 bundle exec rake db:migrate
01 DEPRECATION WARNING: The configuration option `config.serve_static_assets` has been renamed to `config.serve_static_files` to c…
01
01 rake aborted!
01
01 ActiveRecord::NoDatabaseError: FATAL: role "ubuntu" does not exist
01
01 /home/ubuntu/myapp/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/postgresql_adapter…
01
01 /home/ubuntu/myapp/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/postgresql_adapter…
01
01 /home/ubuntu/myapp/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/postgresql_adapter…
01
01 /home/ubuntu/myapp/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/postgresql_adapter…
01
01 /home/ubuntu/myapp/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/postgresql_adapter…
01
01 /home/ubuntu/myapp/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/abstract/connectio…
01
01 /home/ubuntu/myapp/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/abstract/conn
如果我回到旧的值,工作。使用环境变量,中断。
环境
ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
rails -v: Rails 4.2.3
pg_config --version: PostgreSQL 9.3.8
psql --version: psql (PostgreSQL) 9.3.8
bundle -v: Bundler version 1.13.7
Ubuntu 14.04.2 LTS
我感谢任何帮助。 啧啧!
Somar--
您可以尝试一次切换到一个 ENV 变量。第一次更新config/database.yml
使用ENV['PG_DB_HOST']
,保留其他值硬编码。尝试部署并查看是否收到错误。如果没有,请继续添加剩余的 ENV 变量,直到部署失败。
这可能有助于您确定特定 ENV 变量是否导致了问题。
谢谢!