Миграция Rails с другим пользователем, отличным от обычных подключений

#ruby-on-rails #database #migration

#ruby-on-rails #База данных #миграция

Вопрос:

Как я могу подключиться к БД с другим пользователем при выполнении миграции rails?

Вариант использования — создать другого пользователя Postgres для миграции, отличного от того, который использовался для запуска веб-сервера. В результате чего обычный пользователь веб-сервера DB ограничен CRUD для данных, но не имеет грантов или возможностей, таких как УДАЛЕНИЕ и т.д.

Для того, чтобы это произошло, мне нужны миграции Rails для запуска с другим пользователем с полным доступом к таблице создания и удаления. (Creds могут храниться в зашифрованном файле учетных данных Rails, но их хранение в ENV на сервере, вероятно, подойдет).

Итак, для ясности, настройка пользователей не проблема, я могу все это сделать. Я просто хочу знать, есть ли наилучший способ изменить пользователя / учетные данные, используемые rails db:migrate

Ответ №1:

Вы можете создать новую среду, в которой настроен пользователь собственной базы данных config/database.yml . Пример:

 default: amp;default
    adapter: postgresql
    database: dev_db_name
    username: dev_user_name
    password: dev_password

development:
    <<: *default

production:
    <<: *default
    database: production_db_name
    username: production_user_name
    password: production_user_password

migrations:
    <<: *default
    database: production_db_name
    username: migration_user_name
    password: migration_user_password
  

Поэтому при запуске миграции вам необходимо указать новую среду:

 RAILS_ENV=migrations rake db:migrate
  

ВАЖНО: При создании новой среды убедитесь, что вы выполнили эти необходимые шаги:

  1. Создайте новый config/environments/YOUR_ENVIRONMENT.rb файл
  2. Создайте новую запись конфигурации базы данных в config/database.yml , если ваше приложение использует базу данных
  3. Создайте новую базовую запись секретного ключа в config/secrets.yml для приложений на Rails 4.1 и выше

Для получения дополнительной информации нажмите здесь

Комментарии:

1. 1 Это аккуратный подход. Я думаю, вы имеете в виду RAILS_ENV=migrations rake db:migrate , не db:migrations , верно?

Ответ №2:

Вы можете установить соединение с базой данных через ENV["DATABASE_URL"] . Это имеет приоритет над любыми настройками в config/database.yml и объединяется с ними:

 DATABASE_URL=postgresql://localhost/some_other_database?username=maxamp;password=p4ssw0rd rails db:migrate
  

Если вы хотите сделать что-то более продвинутое, например, использовать зашифрованные учетные данные для хранения пароля, я бы рекомендовал написать пользовательскую задачу rake.