Миграция Rails не меняет schema.rb
У меня есть миграция рельсов, которая не применяется к моему 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?
Ответы
Ответ 1
Из документации:
Задача rake db:reset
приведет к сбросу базы данных, ее воссозданию и загрузке текущей схемы.
Это не то же самое, что выполнять все миграции. Он будет использовать только содержимое текущего файла schema.rb. Если миграцию нельзя отменить, "rake db: reset" вам не поможет. Чтобы узнать больше о демпинге схемы, см. 'схема демпинга и вы.'
So 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
Ссылка
Ответ 2
"Версии" миграций выполняются с помощью временных меток. Rails проверяет, какие миграции необходимо выполнить, сравнивая отметку времени последней миграции выполнения и видя, есть ли какие-либо новые.
Если версия новой миграции 123123123
, она не будет запущена, так как это число не больше текущей метки времени (например, 20131209170300
).
Ответ 3
Найден способ получения описания ошибки.
ran rake db: migrate: reset и получил
`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`'