【Heroku】DBを1から作り直したい時にやること(rails db:reset)
ローカルだと一発で出来るdb:reset
がheroku
だとできないだと
$ 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_URL
とYOUR_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
でけた。めでたしめでたし。