2

新しい Rails マイグレーションを生成しました:

rails generate migration some_new_column_to_table

編集: --

移行を実行しました:

rake db:migrate

更新されたテスト データベース:

rake db:test:prepare

change メソッドに何も追加していないことに気付き、

移行ファイルを更新しました:

class AddSomeColumnToTable < ActiveRecord::Migration
  def change
    add_column :table, :some_column, :string
    add_index :table, :some_column
  end
end

移行を実行しました(再度):

rake db:migrate

更新されたテスト データベース (再度):

rake db:test:prepare

これらのコマンドを実行した後、「some_column」はデータベースに追加されませんでした。ここでこの問題の解決策を見つけました: rake db:migrate is not working

rake db:drop:all
rake db:create:all
rake db:migrate

なぜこれで問題が解決したのですか? 今後どのように防ぐことができますか?

4

2 に答える 2

1

あなたの問題が何であるかは明らかではありません。しかし、最後のコマンドは問題を解決します。

rake db:drop:all  << drop the database
rake db:create:all  << create the database (not the tables)
rake db:migrate << build up the database based on the migrations

私の経験では、移行は「動作を停止」せず、個々のコマンドにすぎないため、レイアウトどおりに動作します。ただし、それらは順番に実行する必要があるため、移行の編集を開始する場合は、移行が実行されたかどうかに注意する必要があります。移行の問題は、通常、それらを順不同で編集した結果です。最も安全な方法は、既に実行されている移行を編集しないことです。まず、次のいずれかを実行します。

rake db:rollback  << rollback the last migration (you can do this multiple times)
rake db:migrate VERSION=00000   << This will rollback to a specific migration
rake db:rollback STEP=2 << rollback 2 migrations

うまくいけば、それは役に立ちます。

于 2012-11-08T15:25:35.323 に答える
0

確かにこれが問題だとは言えませんが、一見の価値があります。

移行を台無しにした可能性があります。

どのコンピュータにも一度も移行されていない限り、移行を編集するのは安全ではありません。

たとえば、uが行ったのと同じようにフィールドを追加する移行をuが作成したとします。次に、フィールドがもう必要ないことに気づき、移行に使用しました。

ただし、すでに移行を実行している場合は、データベースまたはケースにファイルが残され、そのフィールドは追加されません。

したがって、移行を操作するときは、古い移行を編集しないようにしてください。常に新しいものを作成してください。

于 2012-11-08T15:31:54.307 に答える