Миграция 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: сброс. Затем я попробовал rake db:migrate:up VERSION=123123123(это миграция #). Я нахожусь в моем "dev" окружении.

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

8 ответов

Решение

Из документации:

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

Ссылка

Я была такая же проблема. Я работаю в среде разработки (с Passenger и Apache). Среды производства и разработки используют одну и ту же базу данных.

Когда я бегу rake db:migrate, БД была изменена, но схема не была обновлена. Тогда я бегу rake db:migrate RAILS_ENV=developmentи теперь схема была обновлена.

Кажется, что рельсы / грабли запутались в моем окружении. Пассажир устанавливает среду разработки для этого сайта, но rake aboutговорит "Окружающая среда производства".

Сначала вы пытаетесь остановить миграцию

rake db:migrate:down VERSION=20180605141404 # "VERSION=20180605141404 вашей версии миграции"

И снова ваша миграция

rake db:migrate:up VERSION=20180605141404 #"VERSION=20180605141404 вашей версии миграции"

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

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

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

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

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

`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`'

В моем случае это был параметр конфигурации в config/application.rb :

config.active_record.dump_schema_after_migration = false

Изменение его наtrueрешил проблему.

Попробуйте остановить Spring перед запуском миграции. Меня устраивает

      bin/spring stop
Другие вопросы по тегам