Не удается запустить миграцию БД на рельсах

У меня были постоянные проблемы с миграцией базы данных в 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:drop
db:create

затем снова запустите миграцию в обычном режиме. в основном db: migrate работает только в первый раз после удаления и создания базы данных.

Я также пробовал откат перед запуском миграции.

Это далеко от идеала, поэтому я был бы признателен за любую помощь.

(Я понимаю, что есть похожие вопросы, но все их проблемы решаются после сброса БД)


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
Спасибо, Шамсул, я тоже пробовал это, и иногда это работает, но я ищу более постоянное исправление, чтобы я мог нормально запускать 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