Как только вы начнете программировать на Rails, вы неизбежно столкнетесь с db:migrate, который применяет миграцию к вашей базе данных. Затем вы делаете ошибку и узнаете о db:rollback, чтобы вернуть предыдущую миграцию.

После некоторого программирования вы натыкаетесь на db:reset, чтобы удалить и воссоздать вашу базу данных, запустив все миграции в этой новой базе данных. Наконец, вы понимаете, что потеряли все свои образцы данных после последнего сброса, и обнаруживаете db:seed, который вставляет образцы данных в базу данных, поэтому ваше приложение rails выглядит реалистично, и вы можете вернуться к чистому листу, часто запуская db:reset.

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

Как найти все задачи базы данных

Вы можете найти все задачи базы данных, которые предоставляет Rails, выполнив следующую команду из каталога приложения Rails.

➜  blog (main) ✗ bin/rails help | grep db:
  db:create
  db:drop
  db:environment:set
  db:fixtures:load
  db:migrate
  db:migrate:down
  db:migrate:redo
  db:migrate:status
  db:migrate:up
  db:prepare
  db:reset
  db:rollback
  db:schema:cache:clear
  db:schema:cache:dump
  db:schema:dump
  db:schema:load
  db:seed
  db:seed:replant
  db:setup
  db:structure:dump
  db:structure:load
  db:system:change
  db:version

Вы также можете найти исходный код для этих задач в файле database_tasks.rb в репозитории Rails и в файле databases.rake в каталоге ActiveRecord/Railties. Вспомогательный класс ActiveRecord::Tasks::DatabaseTasks инкапсулирует логику общих задач, используемых для управления базой данных и миграциями.

Вот краткое описание каждой задачи базы данных.

db:create: создает базу данных, если она еще не существует.

db:drop: удаляет базу данных, если она существует.

db:environment:set: исправляет EnvironmentMismatchError или NoEnvironmentInSchemaError, возникающие, если данные среды не найдены в схеме, путем установки текущей среды во внутренней таблице.

db:fixtures:load: загружает фикстуры, т. е. образцы данных, которые вы хотите протестировать. Они хранятся в файле YAML в каталоге test/fixtures/.

db:migrate: запускает все еще не запущенные миграции для текущей среды.

db:migrate:down: отменяет преобразования, выполненные методом up последней миграции, путем запуска метода down.

db:migrate:redo: откат базы данных на одну миграцию и повторная миграция вверх.

db:migrate:status: отображает статус миграции.

db:migrate:up: запускает метод up для данной миграции.

db:prepare: Запускает setup, если база данных не существует. В противном случае он запускает миграции.

db:reset: сбрасывает вашу базу данных, используя ваши миграции для текущей среды. Он делает это, запуская задачи db:drop, db:create, db:migrate.

db:rollback: возвращает схему к предыдущей версии, отменяя только что выполненную миграцию. Если вы хотите отменить предыдущие миграции n, передайте STEP=n этой задаче.

db:schema:cache:clear: очищает файл db/schema_cache.yml, созданный задачей db:schema:cache:dump.

db:schema:cache:dump: создает файл db/schema_cache.yml.

db:schema:dump: создает файл схемы базы данных (либо db/schema.rb, либо db/structure.sql, в зависимости от config.active_record.schema_format).

db:schema:load: загружает файл схемы базы данных (db/schema.rb или db/structure.sql, в зависимости от config.active_record.schema_format) в базу данных.

db:seed: загружает исходные данные из файла db/seeds.rb.

db:seed:replant: усекает таблицы каждой базы данных для текущей среды и загружает начальные значения.

db:setup: создает все базы данных db:create, загружает все схемы db:schema:load и инициализирует исходными данными db:seed. Однако он не удалит базу данных, если она существует. Используйте db:reset, чтобы сначала удалить все базы данных.

db:structure:dump: устарело. Он использовался для создания дампа файла structure.sql.
db:structure:load: устарело. Он использовался для загрузки файла structure.sql.

Чтобы узнать историю того, почему эти задачи устарели, ознакомьтесь с этим wtf. Нет, серьезно.

db:system:change: запуск генератора rails new без указания базы данных устанавливает для вашего приложения значение sqlite. Это хлопотно изменить базу данных позже. Эта задача поможет вам легко изменить базу данных, делегировав ее генератору rails db:change SYSTEM=postgresql|mysql|whatever.

db:version: печатает текущий номер версии схемы.

Ну вот. Надеюсь, поможет.

Эта запись изначально была опубликована в моем блоге: Все задачи базы данных в Rails