Я пытаюсь запустить только одну миграцию из целой группы в моем приложении rails. Как я могу это сделать? Я не хочу запускать какие-либо миграции до или после него. Спасибо.
Грабли только одна миграция
Ответ 1
rake db:migrate:redo VERSION=xxxxxxx
, но это запустит down
, а затем шаг up
. Вы можете сделать это в сочетании с комментированием нижнего шага временно.
Ответ 2
rake db:migrate:up VERSION=1234567890
аналогично rake db:migrate:down
, чтобы перейти к определенной миграции вниз. Вы можете получить список доступных задач рейка с помощью rake -T
.
Ответ 3
Мне пришлось выполнить одну миграцию, которая изменилась, и ее нужно повторно запускать независимо от всех других миграций. Запустите консоль и сделайте следующее:
>> require 'db/migrate/your_migrations.rb'
=> ["YourMigrations"]
>> YourMigrations.up
=> etc... as the migration runs
>> YourMigration.down
Более полезно это можно было бы включить в задачу rake и т.д.
Ответ 4
rake db:migrate VERSION=20098252345
дайте попробовать.
Ответ 5
rake db:migrate:up VERSION=version_no
Переносит (добавит) конкретную миграцию script
rake db:migrate:down VERSION=version_no
Удалит конкретную миграцию script
Ответ 6
Развернувшись на ответе, приведенном выше, require
не работал у меня, но load
сделал. Чтобы быть конкретным, для файла миграции:
class ChangeMinQuantityToRaces < ActiveRecord::Migration
def change
change_column :races, :min_quantity, :integer, :default => 0
end
end
в консоли ввода
> load 'db/migrate/30130925110821_change_min_quantity_to_races.rb'
> ChangeMinQuantityToRaces.new.change
работал у меня.
> Race.new.min_quantity # => 0
Это было для ruby 1.9.3p484 (версия 2013-11-22 версии 43786) [x86_64-linux] и Rails 3.2.13.
Ответ 7
rake db:migrate:redo version='xxxx'
Не забудьте поставить кавычку вокруг xxxx, xxxx - это метка времени (или идентификатор миграции) для вашей миграции.
Вы можете проверить отметки времени (идентификатор миграции) для предыдущих миграций, которые вы сделали, используя
rake db:migrate:status
Ответ 8
У меня есть полезный метод, который делает это очень легким в разработке. Я нахожу, что это помогает мне избежать создания слишком большого количества миграций - обычно я изменяю миграцию до тех пор, пока они не будут развернуты.
http://fullware.net/index.php/2011/05/26/easily-load-rails-migrations-for-console-execution/
Ответ 9
Добавление моего 2 ¢ к этому, потому что я столкнулся с этой же проблемой:
Если вы абсолютно хотите снова выполнить перенастройку без создания нового, вы можете сделать следующее:
rails dbconsole -p
devdb=# delete from public.schema_migrations where version = '20150105181157';
И рельсы "забудут", что он выполнил переход на 20150105181157. Теперь, когда вы запустите db: migrate, он запустит его снова.
Это почти всегда плохая идея. Один экземпляр, где это может иметь смысл, - это если у вас есть ветка развития, и вы еще не определили свою миграцию и хотите добавить к ней некоторые вещи в процессе разработки. Но даже тогда вам лучше сделать свой переход на 2 пути, чтобы вы могли повторно откатываться и повторять попытку повторно.
Ответ 10
Должен быть способ запуска класса миграции через консоль. Кажется, я не могу распознать код миграции.
Однако, как указывают комментарии, он предпочитает выполнять миграцию по порядку. Использование:
rake db:migrate VERSION=##########
Скопируйте и вставьте свой код при переходе на script/console?
Ответ 11
Я использую эту технику в разработке, когда я меняю миграцию на значительную сумму, и я не хочу переносить тонну и потерять любые данные на этом пути (особенно когда я импортирую устаревшие данные, долгое время, которое я не хочу повторно импортировать).
Это 100% хакерский, и я бы определенно не рекомендовал делать это на производстве, но он будет делать трюк:
- Переместить перенос, который вы хотите повторно запустить из своего каталога во временное место
- Сгенерировать другую миграцию с тем же именем
- Скопировать/вставить исходный код миграции в вновь созданный файл миграции
- Запустите новую миграцию
- Удалить вновь созданный файл миграции
- Отредактируйте миграцию схемы, чтобы удалить последнее значение
- Восстановить старый файл миграции