18

У меня есть миграция рельсов, которая не применяется к моей schema.rb. Миграция должна создать таблицу:Rails migration не меняет schema.rb

class CreateUserGraphs < ActiveRecord::Migration 
    def change 
    create_table :user_graphs do |t| 
     t.string :name 
     t.string :content 
     t.integer :user_id 
     t.string :type_id 
     t.integer :upload_id 

     t.timestamps 
    end 

    add_index :user_graphs, [:user_id, :created_at] 
    end 
end 

Я сделал db: reset. Затем я попробовал rake db: migrate: up VERSION = 123123123 (это миграция #). Я в своей среде «dev».

Почему миграция не влияет на schema.rb?

+3

Вы пытались сначала сбросить базу данных? 'rake db: drop db: create db: migrate' – Vucko

+1

Интересно, что сработало. Как 'rake db: drop db: create' отличается от' rake db: reset'? –

+1

'rake db: reset' running' db: create db: schema: загрузить db: seed' без миграции. Я думаю, что 'db: migrate: reset' будет соответствовать вашим потребностям. – Vucko

ответ

39

От documentation:

rake db:reset задача будет удалить базу данных, обновить его и загрузить текущую схему в нее.

Это не то же самое, что выполнять все миграции. Он будет использовать только содержимое текущего файла schema.rb. Если миграция не может быть отменена, «rake db: reset» может вам не помочь. Чтобы узнать больше о сбросе схемы см. 'схема сбрасывания и вы.'

Так rake db:reset =>db:drop db:create db:schema:load db:seed

Для запуска всех переселений использование: rake db:drop db:create db:migrate

Или db:migrate:reset =>rake db:drop db:create db:migrate

Reference

0

'Версии' миграций являются выполняется через временные метки. Rails проверяет, какие миграции необходимо выполнить, сравнивая временную метку последней миграции и просматривая, есть ли новые.

Если версия вашей новой миграции равна 123123123, она не будет запущена, так как это число не превышает текущую временную метку (например, 20131209170300).

0

Нашли способ получить описание ошибки. побежал грабли БД: мигрировать: сброс и получил

`SQLite3::SQLException: Cannot add a NOT NULL column with default value NULL: ALTER TABLE "rooms" ADD "priority" integer NOT NULL/usr/local/rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:91:in `initialize`' 
0

Я была такая же проблема ... оказывается, что это было потому, что я редактировал имя моей миграции файла выглядеть аккуратнее. Убедитесь, что вы не удаляете отметку времени в названии файла миграции, как я.

Я удалил файл миграции, модель, контроллер и связанные с ним тесты и повторно создал контроллер и модель, которые исправили проблему.

Смежные вопросы