これを正しく行う方法
私のようにここに到着した人のために:DROP TABLE products
受け入れられた回答で提案されているように、実行していないことを強く検討してください。代わりにこれを使用することを検討してください。
heroku run rake db:migrate:down VERSION=20160518643350
VERSION は、移行ファイルのタイムスタンプです。つまり、次のプレフィックスです。
db/migrate/20160518643350_create_products.rb
次に、スキーマを変更 (または新しい移行を作成) して実行します。
heroku run rake db:migrate:up VERSION=20160518643350
Rails で新しい PG データベースを作成するschema_migrations
と、移行を追跡するためのテーブルも作成されます。Heroku の Postgres コンソール ( heroku pg:psql
) からテーブルを削除すると、移行ファイルはそれを認識せず、新しいスキーマで再度移行を実行しようとしても、Rails はテーブルが既に存在すると見なしてテーブルを作成しません。
heroku run rake db:migrate:up ...
うまくいかない場合
すでにテーブルを実行heroku pg:psql
してドロップしている場合 ( DROP TABLE products;
)、移行からテーブルを作成する際に問題が発生する可能性があります。これは、上記で説明したように、Rails がテーブルがそこにあると見なすためです。その場合は、次の手順を実行します。
1. Herokuでpsqlコンソールを開き、任意products
のテーブルを作成
heroku pg:psql
CREATE TABLE products(foo int);
ターミナルを終了しpsql
ます。
2. 移行を実行して、schema_migrations が削除されたテーブルを記録するようにします
heroku run rake db:migrate:down VERSION=20160518643350
これにより、新しいテーブルが削除され、移行が記録されます。
3. 移行を実行して、新しいテーブルを作成します
heroku run rake db:migrate:up VERSION=20160518643350
それはそれを行う必要があります!