herokuのDB本番環境リセット(PostgreSQL)
下記のページなどを参考に、herokuの本番環境DB(PostgreSQL)のリセットを行ったが、
なかなか思う様にできなかったので、備忘録。
- heroku上のDBをリセットする
- rails5 on herokuでPostgreSQLのレコードをすべて消したい時の方法
- 本番環境のDBエラーに困っています(rails)
- メモ - 本番環境でrake db:migrateしたらエラー(relation テーブル名 does not exit)出た。
- Rails5でDBに自動生成されるテーブル、"ar_internal_metadata" とは何なのか
環境としては、
・IDE:cloud 9
・サーバー:heroku
・本番DB:PostgreSQL
1. heroku pg:reset DATABASE_URL
を実行した後、heroku run rails db:migrate
を実行。
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "〇〇〇" does not exist
のエラーが発生してしまう。
2. heroku run rails db:schema:load RAILS_ENV=production
を実行。
rails aborted!
ActiveRecord::NoEnvironmentInSchemaError:
Environment data not found in the schema. To resolve this issue, run:
bin/rails db:environment:set RAILS_ENV=production
との警告が表示される。
3. 警告を基に、heroku run rails db:environment:set RAILS_ENV=production db:schema:load
を実行。
2の警告を基に、RAILS_ENV=production
を変えて、db:environment:set RAILS_ENV=production
を追記。
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your 'production' database.
If you are sure you want to continue, run the same command with the environment variable:
DISABLE_DATABASE_ENVIRONMENT_CHECK=1
との警告が表示される。
4. 警告を基に、heroku run rails db:environment:set DISABLE_DATABASE_ENVIRONMENT_CHECK=1 RAILS_ENV=production db:schema:load
を実行。
3の警告を基に、DISABLE_DATABASE_ENVIRONMENT_CHECK=1
を追記。
DBのリセットに成功!!
その後、heroku run rails db:migrate
を実行し、無事本番環境のDBを再構築することができた。
まとめ
- 警告文やエラー文は最重要。
-
db:schema:load
は本番環境のデータを完全に消去してしまう為、取り扱いは注意。
(参考)rake db:schema:load vs. migrations - Stack Overflow
db:schema:load
は本番環境のデータを完全に消去してしまう為、取り扱いは注意。(参考)rake db:schema:load vs. migrations - Stack Overflow
Author And Source
この問題について(herokuのDB本番環境リセット(PostgreSQL)), 我々は、より多くの情報をここで見つけました https://qiita.com/tatsugon14/items/f6002622ddf0d0ae15a5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .