【Rails5+Heroku】Heroku上の本番環境のDBをリセットしようとして苦戦した話

Ruby on Rails

こんにちは、ジョンです。
今回は、Heroku上にあげているDBをリセットしようとして苦戦した話です。

スポンサーリンク

環境

Rails5.2
Heroku
Postgres

スポンサーリンク

経緯

開発した内容をHeroku上にデプロイした際、
seedを複数回実行してしまい、マスターデータが重複してしまっていることに気付きました。

やったこと

※アプリ名は「app-name」に置き換えております。

まずは普通に db:reset

Herokuにあげているとは言え、本格稼働しているわけではないので、
では一旦リセットしようと、 heroku run rails db:reset を叩いてみると

jonconan-iMac:app-name jonconan$ heroku run rails db:reset
   (中略)
rails aborted!
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

調べてみると、Rails5系から、本番環境の db:reset は出来なくなったようです。
エラーメッセージにも出ている通り、オプション付けなきゃいけないっぽいですね。

オプションを付けて再挑戦

ではでは再挑戦。

jonconan-iMac:app-name jonconan$ heroku run rails db:reset DISABLE_DATABASE_ENVIRONMENT_CHECK=1
Running rails db:reset DISABLE_DATABASE_ENVIRONMENT_CHECK=1 on ⬢ app-name... up, run.9816 (Free)
FATAL:  permission denied for database "postgres"
DETAIL:  User does not have CONNECT privilege.
Couldn't drop database 'XXXXXXXXXXXXX'
rails aborted!
PG::ConnectionBad: FATAL:  permission denied for database "postgres"
DETAIL:  User does not have CONNECT privilege.

権限が・・・ない・・・・?

更に再調査

色々調べてみると、Heroku上のDBをリセットする、 heroku pg:reset DATABASE_URL なるコマンドがあることを発見。
なるほどね、じゃぁこれをやってみよう。
まずは DATABASE_URL を確認しなきゃなので…

jonconan-iMac:app-name jonconan$ heroku config
=== app-name Config Vars
DATABASE_URL:             postgres://XXXXXXXXXXXXXXXXXXXXXX.compute-1.amazonaws.com:5432/~~~~~~~~~
LANG:                     en_US.UTF-8
RACK_ENV:                 production
RAILS_ENV:                production
RAILS_LOG_TO_STDOUT:      enabled
RAILS_SERVE_STATIC_FILES: enabled
SECRET_KEY_BASE:          ******************************************

あったあった、これだ
ではこれをコマンドに突っ込んで・・・

jonconan-iMac:app-name jonconan$ heroku pg:reset postgres://XXXXXXXXXXXXXXXXXXXXXX.compute-1.amazonaws.com:5432/~~~~~~~~~
 ▸    Unknown database: postgres://XXXXXXXXXXXXXXXXXXXXXX.compute-1.amazonaws.com:5432/~~~~~~~~~.
 ▸    Valid options are: DATABASE_URL

・・・・・?
何故か出来ない・・・?

・・・・まさか。

結論

最終的な正解は、これでした。

heroku pg:reset DATABASE_URL

まさかの直接打つ感じでした… URLに置き換えろってことかと思った。
このコマンドを打つと、警告が出ます。

jonconan-iMac:app-name jonconan$ heroku pg:reset DATABASE_URL
 ▸    WARNING: Destructive action
 ▸    postgresql-asymmetrical-87864 will lose all of its data
 ▸    
 ▸    To proceed, type app-name or re-run this command with --confirm app-name

> 
続行するには、app-nameと入力するか、-confirm app-nameでこのコマンドを再実行します

とのことなので、ここで入力すべきは、

jonconan-iMac:app-name jonconan$ heroku pg:reset DATABASE_URL
 ▸    WARNING: Destructive action
 ▸    postgresql-asymmetrical-87864 will lose all of its data
 ▸    
 ▸    To proceed, type app-name or re-run this command with --confirm app-name

> app-name
Resetting postgresql-asymmetrical-87864... done

無事にリセットできました!

タイトルとURLをコピーしました