2016-08-20 6 views
1

私はusersテーブルを作成し、それをHerokuに移行して正常に動作しました。私は管理テーブルを追加しようとしましたが、何かがうまくいかず、何が起こったのか分かりません。ユーザーと管理者のテーブルの両方が私の地元の環境で正常に動作しているが、私はHerokuのへの移行をプッシュするとき、私は、ユーザー表がすでに作成されたエラーが表示されます。Heroku上の重複テーブルエラー - テーブルは既に存在しますが、移行はローカルで動作します -

Migrating to DeviseCreateUsers (20151119150443) == 20151119150443 DeviseCreateUsers: migrating ================================ -- create_table(:users) PG::DuplicateTable: ERROR: relation "users" already exists : CREATE TABLE "users" ("id" serial primary key, "email" character varying(255) DEFAULT '' NOT NULL, "encrypted_password" character varying(255) DEFAULT '' NOT NULL, "reset_password_token" character varying(255), "reset_password_sent_at" timestamp, "remember_created_at" timestamp, "sign_in_count" integer DEFAULT 0 NOT NULL, "current_sign_in_at" timestamp, "last_sign_in_at" timestamp, "current_sign_in_ip" character varying(255), "last_sign_in_ip" character varying(255), "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL) rake aborted! StandardError: An error has occurred, this and all later migrations canceled:

PG::DuplicateTable: ERROR: relation "users" already exists : CREATE TABLE "users" ("id" serial primary key, "email" character varying(255) DEFAULT '' NOT NULL, "encrypted_password" character varying(255) DEFAULT '' NOT NULL, "reset_password_token" character varying(255), "reset_password_sent_at" timestamp, "remember_created_at" timestamp, "sign_in_count" integer DEFAULT 0 NOT NULL, "current_sign_in_at" timestamp, "last_sign_in_at" timestamp, "current_sign_in_ip" character varying(255), "last_sign_in_ip" character varying(255), "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL) /app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.1.8/lib/active_record/connection_adapters/postgresql/database_statements.rb:128:in `async_exec'

これは私が状況を確認したときに言っているものです

Status Migration ID Migration Name 
-------------------------------------------------- 
    up  20151030033303 ********** NO FILE ********** 
    up  20151102165952 ********** NO FILE ********** 
    up  20151102170119 ********** NO FILE ********** 
    up  20151103020350 Create restaurants 
    up  20151103160832 ********** NO FILE ********** 
    up  20151103170143 ********** NO FILE ********** 
    up  20151105172014 ********** NO FILE ********** 
    up  20151114043509 ********** NO FILE ********** 
    down 20151119150443 Devise create users 
    down 20160809004949 Devise create admins 

私はHerokuのに入ることは、ユーザーがTABLので、私は2人のユーザーがいると言うコンソール:Herokuの上のマイグレーションの

Status Migration ID Migration Name 
-------------------------------------------------- 
    up  20151103020350 Create restaurants 
    up  20151119150443 Devise create users 
    up  20160809004949 Devise create admins 

ステータス:ローカル移行のeは移行されましたが、移行ステータスはそれを停止状態として示しています。

私はusersテーブルからデータを失っても構いませんが、実際にはレストランテーブルからデータを失いたくないです。これを修正する方法がわかりません。

+1

Deviseがユーザーテーブルを作成します。 Deviseが独自に作成するものの上にアプリケーションが必要とする列を追加するだけです。この場合、実際にDeviseが作成したテーブルを作成しようとしています。 – MarsAtomic

+0

@MarsAtomic - 私はユーザーテーブルを作成するためにDeviseを使いました。管理テーブルを追加しようとしましたが、移行を実行したにもかかわらず何らかの理由でユーザーの移行が表示されているため、機能しません。私はなぜこれが起こったのか、どのように私のデータのすべてを失うことなくそれを修正するのか分かりません。 –

+0

重要なのは、 'rails g devise user'以外のUsersテーブル* other *を作成するためのマイグレーションを行うべきではないということです。 usersテーブルに追加する追加のフィールドがある場合は、 'rails g migration AddWhateverToUsers'の後に' rails g devise admin'を付けてDeviseを管理者に追加します。投稿した移行に応じてusersテーブルを2回作成しようとしているようです。 Devise [documentation](https://github.com/plataformatec/devise)をご覧ください。 – MarsAtomic

答えて

0

あなたのDBには、移行やカスタムアクションが異なるため、既にテーブルがあると思います。

コマンドラインで試してみてください!

rake db:drop 
rake db:create 
rake db:migrate 
+1

これを行うと、すべてのデータが失われます。 –

+0

ああ、これはあなたのDBストアを再び復元して作成します。ユーザーと管理者が関係する各移行の最初の行を追加できますか?または、db/schemaの内部を見て、テーブル上の競合を見つけてください。 –

関連する問題