Подтвердить что ты не робот

Миграция 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?

4b9b3361

Ответ 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`'