Rails - ошибка миграции при изменении информации базы данных на переменные среды - AWS - PullRequest
0 голосов
/ 25 июня 2018

У меня 2 сервера.

  1. Amazon EC2 - настоящий рабочий сервер. Это живая версия приложения
  2. 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 я:

  1. Вход через SSH
  2. Выполнить sudo nano .profile для редактирования файла .profile
  3. Добавить код

    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'
    
  4. После этого я запускаю эти же коды в терминале. При этом переменные среды сохраняются.

Чтобы проверить, работают ли переменные среды, я захожу на сервер и захожу на 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!

1 Ответ

0 голосов
/ 25 июня 2018

Somar -

Вы можете попробовать переключаться на переменные ENV по одной за раз.Сначала обновите config/database.yml, чтобы использовать ENV['PG_DB_HOST'], оставив другие значения жестко запрограммированными.Попробуйте развернуть и посмотреть, если вы получите ошибку.Если нет, продолжайте добавлять оставшиеся переменные ENV до тех пор, пока развертывание не завершится неудачей.

Это может помочь вам определить, является ли конкретная переменная ENV причиной проблемы.

Спасибо!

...