#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
ВАЖНО: При создании новой среды убедитесь, что вы выполнили эти необходимые шаги:
- Создайте новый
config/environments/YOUR_ENVIRONMENT.rb
файл - Создайте новую запись конфигурации базы данных в
config/database.yml
, если ваше приложение использует базу данных - Создайте новую базовую запись секретного ключа в
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.