У меня 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 отличаются.
Чтобы решить эту проблему, я создаю некоторые переменные среды на обоих серверах.
В Героку очень просто. Я иду в Настройки приложения и в Config Vars, я устанавливаю имя и значение.
В AWS я:
- Вход через SSH
- Выполнить
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
Если я вернусь к старым значениям, работает. С переменными env, breaks.
Окружающая среда
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
Я ценю любую помощь. Tks!