5

新しい Rails 3.1 アプリケーションを作成しています。この新しいアプリケーションで既存のデータベース (以前の Rails 2 アプリケーションで作成されたもの) を再利用したいと考えています。

データベース内の既存のデータの一部を再利用するモデルを定義する新しいアプリケーションを作成しました。

開発およびテスト段階では、クリーン シート データベースで実行されるため、すべて正常に動作しますが、運用環境にデプロイしようとすると、次のようなメッセージが表示されます。

PGError: ERROR:  column "email" of relation "users" already exists
*** [err :: localhost] : ALTER TABLE "users" ADD COLUMN "email" character varying(255) DEFAULT '' NOT NULL

しかし、私は私の移行で次のように考えています

class DeviseCreateUsers < ActiveRecord::Migration
  def change
    change_table(:users) do |t|
      t.database_authenticatable :null => false
      t.recoverable
      t.rememberable
      t.trackable
      t.timestamps
    end
end

db:migrate に既存のものを無視させ、新しいものや新しいタイプのみを変更させるにはどうすればよいですか?

stackoverflow で同様の質問を見ましたが、この質問に答えている人はいません。回答ありがとうございます。

4

2 に答える 2

10

既存のデータベースを使用している場合は、移行によってそれを上書きしようとしないでください。schema.rb で既存のデータベースを複製し、そこから前方に移行して、変更されたフィールドのみを追加する必要があります。

于 2011-07-24T21:17:23.563 に答える
1

私がとったアプローチの 1 つは、新しいモデルを作成することです (まだ移行がないと仮定します。移行がある場合は慎重に削除してください)、たとえば、「rails generate model user」とします。特に、ジェネレーターはそのモデルのデータベース移行を作成します。db migrate rails を実行すると、rails は users テーブルを作成し、既存のデータベースの現在の状態に基づいて schema.rb を作成します。それ以降の移行は、schema.rb と新しく加えられた変更に基づいて行われます。

于 2013-01-22T18:10:13.753 に答える