Я пытаюсь выполнить только одну миграцию из целой кучи в моем приложении rails. Как я могу это сделать? Я не хочу запускать какие-либо миграции до или после нее. Спасибо.
94
Я пытаюсь выполнить только одну миграцию из целой кучи в моем приложении rails. Как я могу это сделать? Я не хочу запускать какие-либо миграции до или после нее. Спасибо.
STEP=n
аргумент вdb:migrate
(гдеn
- количество запускаемых миграций, как и дляdb:rollback
) - тогда вы можете сделатьrake db:migrate STEP=1
илиrake db:migrate STEP=2
и т. Д.Ответы:
rake db:migrate:redo VERSION=xxxxxxx
, но это запустит,down
а затемup
шаг. Вы можете сделать это вместе с временным комментарием шага вниз.источник
rake -T
.db:test:prepare
тоже не отображается в этом списке. Боже, я опаздываю на вечеринку.rake db:migrate:up VERSION=my_version
может ничего не сделать , потому что таблица schema_migrations по-прежнему говорит, что она была запущена. В той же ситуацииrake db:migrate:redo VERSION=my_version
может произойти сбой, поскольку он не может отбросить таблицу. В этом случае,down
временно закомментируйте метод в переносе и запустите его повторноrake db:migrate:redo...
аналогично
rake db:migrate:down
для конкретной миграции вниз. Вы можете получить список доступных рейк-заданий с помощьюrake -T
.источник
VERSION
Упомянуто здесь целое значение в начале каждого из файлов миграции (это просто метка времени, когда она была создана). Например,VERSION=20150720023630
.VERSION
это просто переменная среды, поэтому она может стоять первой в команде или даже предшествовать команде:VERSION=1234567890 rake db:migrate:up
Мне пришлось выполнить одну миграцию, которая изменилась и которую нужно было запустить повторно независимо от всех других миграций. Запустите консоль и сделайте следующее:
Более полезно это было бы поместить в задачу грабли и т. Д.
источник
change
, запускайтеYourMigrations.migrate(:up)
вместо:down
require "#{Rails.root}/db/migrate/your_migrations.rb"
rake db:migrate:up VERSION=version_no
Будет перенесен (добавлен) конкретный сценарий миграции
rake db:migrate:down VERSION=version_no
Удалит конкретный сценарий миграции
источник
попробуйте.
источник
VERSION
это просто переменная среды, поэтому она может стоять первой в команде или даже предшествовать команде:VERSION=20098252345 rake db:migrate
Не забудьте поставить кавычки вокруг xxxx, xxxx - это метка времени (или идентификатор миграции) для вашей миграции.
Вы можете проверить временные метки (идентификатор миграции) для предыдущих миграций, которые вы сделали, используя
источник
Расширение ответа на корч выше,
require
у меня не сработало, но сработалоload
. Чтобы быть конкретным, для файла миграции:в консоли набрав
работал у меня.
Это было для Ruby 1.9.3p484 (2013-11-22, ревизия 43786) [x86_64-linux] и Rails 3.2.13.
источник
Добавляю к этому мои 2 ¢, потому что я столкнулся с той же проблемой:
Если вы абсолютно хотите выполнить миграцию заново, не создавая новую, вы можете сделать следующее:
rails dbconsole -p devdb=# delete from public.schema_migrations where version = '20150105181157';
И rails «забудут», что он выполнил миграцию для 20150105181157. Теперь, когда вы запустите db: migrate, он снова запустит его.
Однако это почти всегда плохая идея. Единственный случай, когда это может иметь смысл, - это если у вас есть ветка разработки, и вы еще не конкретизировали свою миграцию и хотите добавить к ней некоторые вещи в разработке. Но даже в этом случае лучше сделать миграцию двусторонней, чтобы вы могли правильно откатиться и повторить попытку несколько раз.
источник
Должен быть способ запустить класс миграции через консоль. Кажется, я не могу сделать код миграции узнаваемым.
Однако, как указано в комментариях, предпочтительно выполнять миграции по порядку. Использование:
Скопируйте и вставьте свой код при миграции в скрипт / консоль?
источник
У меня есть служебный метод, который упрощает разработку. Я считаю, что это помогает мне избежать создания слишком большого количества миграций - обычно я изменяю миграции, пока они не будут развернуты.
http://fullware.net/index.php/2011/05/26/easily-load-rails-migrations-for-console-execution/
источник
Я использую эту технику в разработке, когда меняю значительный объем миграции, и я не хочу, чтобы миграция происходила на тонну и теряла любые данные в процессе (особенно когда я импортирую устаревшие данные, которые занимают много времени, Я не хочу повторного импорта снова).
Это 100% хакерство, и я бы определенно не рекомендовал делать это в продакшене, но это поможет:
источник