shimmyShow Webアプリ開発ブログ

プログラミングスクールTECH::CAMPを73期を卒業し、紙媒体で実施されている教育の根本を変えていくためのサービスを開発中。当ブログを読めば誰でも当該サービスを開発できるようにするため軌跡を記録中。

Rails5.0以降の本番環境(production環境)にてresetコマンドが実行できないことへの解消法

実施したこと・実施したいこと

初期データ登録用のファイルseeds.rbをローカル環境で変更し、
問題ないことをローカル環境にて確認した。
gitへpushし、Masterへマージ完了。
本番環境にてgit pull origin masterコマンド実行し、
変更後のseeds.rbを本番環境へプル完了。
seeds.rbを反映するため、現在のテーブルをresetするため、
下記コマンドを実行したところエラーが発生した。

本番環境

 Rails 5.2.4.4 

実行内容

全テーブルのデータをリセットするため下記コマンド実行
ターミナル

rails db:migrate:reset RAILS_ENV=production

エラー内容

ターミナル

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
〜省略〜
Tasks: TOP => db:migrate:reset => db:drop => db:check_protected_environments
(See full trace by running task with --trace)

発生原因

Rails5.0以降から本番環境(production環境)へのDBの破壊系タスクのコマンド実行を保護する機能が導入さたため、当該エラーが発生していた。

解消方法

エラーメッセージにしたがって、リセットコマンドにDISABLE_DATABASE_ENVIRONMENT_CHECK=1を追加
ターミナル

rails db:migrate:reset RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1

下記のようにターミナルに表示され、無事リセットできた。
ターミナル

Dropped database 'online_text_production'
Created database 'online_text_production'
== 20200914135559 CreateTexts: migrating ======================================
-- create_table(:texts)
   -> 0.0113s
== 20200914135559 CreateTexts: migrated (0.0114s) =============================

== 20200924122430 DeviseCreateUsers: migrating ================================
以下省略

初期データ登録のため、下記コマンド実行
ターミナル

rails db:seed RAILS_ENV=production

下記メッセージが表示されたため、無事登録完了。
ターミナル

"create Users"
"create Text Categories"
"create Text Contents"

まとめ

Railsのバージョンによって実行できるコマンドや禁止されているコマンドがあるため、エラーメッセージを確認し適切に対応する。
まずはエラーメッセージを落ち着いて読むことからはじめます。