Очистка / повторение миграции Rails

Итак, скажем, у меня есть 10 моделей, которые развивались в течение 100 файлов миграции. Есть ли какая-то утилита, которая могла бы просмотреть мою схему и построить 10 «чистых» файлов миграции?

миграция:

class CreateFoos < ActiveRecord::Migration
  def change
    create_table :foos do |t|
      t.belongs_to  :bar
      t.string :baz
      t.integer :qux, default: 0
    end

    add_index :foos, :bar_id
  end
end

схема:

ActiveRecord::Schema.define(:version => 20140610225017) do
  create_table "foos", :force => true do |t|
    t.integer  "bar_id"
    t.string   "baz"
    t.integer  "qux",         :default => 0
  end

  add_index "foos", ["bar_id"], :name => "index_foos_on_bar_id"
end

Я просто чувствую, что ... если он знает, как перейти от миграции к схеме, тогда наоборот будет легко. Это звучит глупо?


person Dudo    schedule 13.06.2014    source источник
comment
Оба кода являются частью миграции .. Что вы подразумеваете под схемой?   -  person Arup Rakshit    schedule 13.06.2014
comment
второй блок кода из schema.rb   -  person Dudo    schedule 13.06.2014
comment
предположим, у вас есть 10 файлов миграции. Теперь вы хотите изменить или заменить 5-й файл миграции. Затем выполните rake db:rollback STEP=5, а затем отредактируйте 5-й и сохраните его. Затем запустите rake db:migrate. (Но вы потеряете данные) :) Это на ваш страх и риск.   -  person Arup Rakshit    schedule 13.06.2014
comment
или rake db:migrate:down VERSION=235634534534534 для отката определенной миграции. По сути, я не хочу ничего менять. Я просто хочу очистить свои миграции.   -  person Dudo    schedule 13.06.2014
comment
stackoverflow.com/questions/5224827 /   -  person Bot    schedule 13.06.2014
comment
Я видел этот вопрос, @Bot ... Мне не понравился ответ. Я не понимаю, почему «перестраивать» миграции - плохая идея.   -  person Dudo    schedule 13.06.2014
comment
Это потому, что они вам действительно не нужны. Этих двух команд будет достаточно: rake db: create и rake db: schema: load. И я говорю это, потому что год назад у меня было то же самое чувство, и мне было действительно трудно это переварить.   -  person Bot    schedule 13.06.2014


Ответы (2)


Я считаю, что вы можете удалить свои миграции после того, как они все были применены ко всем базам данных, от разработки до производства. Если вы хотите заполнить новую базу данных разработки или производства с нуля, вы можете либо (а) создать резервную копию производственной базы и восстановить ее в новую базу данных, либо (б) загрузить из файла schema.rb, используя rake db:schema:load.

Если вам действительно нужны миграции для некоторой документации или ясности, создайте новую схему rails g migration schema2014. После применения миграции к производственной среде удалите все старые файлы миграции и скопируйте schema.rb в новую миграцию.

person Marlin Pierce    schedule 13.06.2014

Если вас не интересуют фактические данные и вы имеете дело с новой установкой, в которой вы хотите просто создать структуру БД с помощью schema.rb, вам следует использовать rake db:schema:load.

Подробнее:

rake db: schema: load vs. migrations

Создайте файл миграции из schema.rb

person tirdadc    schedule 13.06.2014
comment
правильно ... могу я просто удалить все миграции, если на то пошло? - person Dudo; 13.06.2014
comment
Да, вы можете, при условии, что вы находитесь в этом сценарии, когда вы впервые создаете экземпляр производственной среды. - person tirdadc; 13.06.2014