web-dev-qa-db-ja.com

Rails移行はschema.rbを変更しません

Schema.rbに適用されていないRails移行があります。移行によりテーブルが作成されます。

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(これは移行番号です)を試しました。私は「開発」環境にいます。

移行がschema.rbに影響しないのはなぜですか?

23
Don P

ドキュメント から:

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

参照

48
Vucko

私は同じ問題を抱えていました...移行ファイルの名前を編集して見栄えを良くしたことが原因でした。移行ファイルのタイトルにあるタイムスタンプは、私と同じように削除しないでください。

移行ファイル、モデル、コントローラー、関連するテストを削除し、問題を修正したコントローラーとモデルを再生成しました。

1
Mia Genovese

同じ問題がありました。私は開発環境で作業しています(PassengerとApacheを使用)。実稼働環境と開発環境は同じデータベースを使用します。

rake db:migrateを実行すると、dbは変更されましたが、スキーマは更新されませんでした。次に、rake db:migrate Rails_ENV=developmentを実行し、スキーマが更新されました。

Rails/rakeは私の環境について混乱しているようです。乗客はこのサイトの開発環境を設定しますが、rake aboutは「環境の生産」と言います。

1
Jussi Hirvi

移行の「バージョン」はタイムスタンプを介して行われます。 Railsは、最後に実行された移行のタイムスタンプを比較し、新しい移行があるかどうかを確認することにより、実行する必要がある移行を確認します。

新しい移行のバージョンが123123123、その番号は現在のタイムスタンプより大きくないため実行されません(例:20131209170300)。

1
sevenseacat

最初に移行を試みます

rake db:migrate:down VERSION = 20180605141404# "VERSION = 20180605141404移行バージョン"

そして再びあなたの移行

rake db:migrate:up VERSION = 20180605141404# "VERSION = 20180605141404移行バージョン"

1
Raj

エラーの説明を取得する方法を見つけました。 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`'
0
Pavel Murnikov