Не може да се изпълни db миграция на релси

Имах постоянни проблеми с мигрирането на база данни в rails чрез rake db:migrate.

Моята миграция в момента изглежда така:

class CreateArticles < ActiveRecord::Migration
  def change
    create_table :articles do |t|
    t.string :title
    t.text :subtitle
    t.string :slug
    t.text :body
    t.integer :publish, limit: 1, default: 0
    t.timestamps
    end
  end
end

Ако обаче някога изтрия колона от това или дори добавя или модифицирам такава, командата rake db:migrate не прави нищо. Единственият начин, по който мога да го мигрирам, е понякога да стартирам нещо като:

rake db:migrate VERSION=20080906120000

Но дори това е темпераментно, така че през повечето време трябва да нулирам db с помощта на

db:drop
db:create

след това стартирайте миграцията отново както обикновено. основно db:migrate работи само за първи път след премахване и създаване на db.

Също така опитах връщане назад, преди да стартирам миграцията.

Това далеч не е идеално, така че ще се радвам на всяка помощ.

(Осъзнавам, че има подобни въпроси, но всичките им проблеми се решават след нулиране на db)


person Terryfrancis    schedule 10.06.2014    source източник
comment
Изпълнявате ли миграцията няколко пъти? Трябва ли да db:rollback и след това db:migrate?   -  person Bob McCown    schedule 10.06.2014
comment
Здравей Боб, да, стартирам го няколко пъти, както когато добавям нещо или изтривам нещо от миграцията. Опитах връщане преди да го стартирам няколко пъти, но не изглежда да има разлика.   -  person Terryfrancis    schedule 10.06.2014
comment
вижте връзката stackoverflow.com/questions/ 23563978/ може да е полезно   -  person Shamsul Haque    schedule 10.06.2014
comment
Благодаря Shamsul, аз също опитах това и понякога работи, но търся по-трайна корекция, за да мога да стартирам db:migrate нормално.   -  person Terryfrancis    schedule 10.06.2014


Отговори (1)


Трябва да изпълните миграцията down и след това да я изпълните up отново, което се прави със задачата redo. Опитайте тази:

rake db:migrate:redo VERSION=20080906120000

РЕДАКТИРАНЕ: ако имате данни, които искате да запазите в тази таблица, по-добре е да направите нова миграция, за да премахнете колоната или каквото искате да направите, тъй като горното ще изпусне и създаде отново таблицата, изтривайки данните в процеса.

person Max Williams    schedule 10.06.2014