Грабли только одна миграция

Я пытаюсь запустить только одну миграцию из целой группы в моем приложении 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% хакерский, и я бы определенно не рекомендовал делать это на производстве, но он будет делать трюк:

  • Переместить перенос, который вы хотите повторно запустить из своего каталога во временное место
  • Сгенерировать другую миграцию с тем же именем
  • Скопировать/вставить исходный код миграции в вновь созданный файл миграции
  • Запустите новую миграцию
  • Удалить вновь созданный файл миграции
  • Отредактируйте миграцию схемы, чтобы удалить последнее значение
  • Восстановить старый файл миграции