Как только вы начнете программировать на 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