おぴよの気まぐれ日記

おぴよの気まぐれ日記

岡山やプログラミング、ファッションのこと、子育てや人生、生き方についての備忘録。

【Heroku】DBを1から作り直したい時にやること(rails db:reset)

ローカルだと一発で出来るdb:resetherokuだとできないだと

$ rails db:reset
$ rails db:seed
$ 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

herokuじゃなくて、rails5から本番環境では削除できないようになってるっぽいですね。

Rails5から、productionモードでは、db:dropなどのDBを破壊する系のコマンド実行を防止する機能が追加された。

なんかオプション付けろって言われたので、再実行

$ heroku rake db:reset DISABLE_DATABASE_ENVIRONMENT_CHECK=1
FATAL:  permission denied for database "postgres"
DETAIL:  User does not have CONNECT privilege.
Couldn't drop database 'hogehoge'
rails aborted!
PG::ConnectionBad: FATAL:  permission denied for database "postgres"
DETAIL:  User does not have CONNECT privilege.

権限が無いだと...

色々調べてみるとDATABASE_URLYOUR_APP_NAMEを指定したheroku pg:resetってコマンドがあるみたい

$ heroku config
DATABASE_URL:             postgres://hogehoge
$ heroku apps
lit-ravine-31204
mapachannel

$ heroku pg:reset postgres://hogehoge -a mapachannel
 ▸    Unknown database: postgres://hogehoge. Valid options are:
 ▸    DATABASE_URL

くそーやっぱりできねーじゃねーか。 なので、別手段。

やりたいことはデータを消したいことなので、直接DBに接続してデータ消す作戦へ

$ heroku pg:psql
mapachannel::DATABASE=> drop schema public cascade;
$ heroku rake db:migrate
rails aborted!
ActiveRecord::StatementInvalid: PG::InvalidSchemaName: ERROR:  no schema has been selected to create in
LINE 1: CREATE TABLE "schema_migrations" ("version" character varyin...

あーこれ完全にぶっ壊したなー

完全に詰んだ!と思っていたのだけど、もっかい調べてみてるとheroku pg:reset DATABASE_URLとしか書いてない。 これ、本当にこのまま打つんじゃないか?と思い実行。

$ heroku pg:reset DATABASE_URL
 ▸    WARNING: Destructive action
 ▸    postgresql-reticulated-99811 will lose all of its data
 ▸
 ▸    To proceed, type mapachannel or re-run this command with --confirm mapachannel

> mapachannel
Resetting postgresql-reticulated-99811... done

すでにデータが無いよってエラーだと思うけど、アプリの名前mapachannelを打ったら成功した。

で、再実行!

$ heroku run rails db:migrate
$ heroku run rails db:seed

でけた。めでたしめでたし。