1
0

More than 3 years have passed since last update.

【Rails】 本番環境MySQLデータを開発環境に入れた後に消す方法

Last updated at Posted at 2020-06-23

はじめに

本番環境にMySQLのデータを開発環境に入れる時には特にエラーもなくインプットすることができたのですが、消す時になってエラーが発生してハマってしまいました。
少し珍しいケースかもしれませんが、他の方の参考になればと思いまとめることにしました。

関連リンク

そもそも本番環境のMySQLのデータをどうやって開発環境に入れるのかという記事は下記をご参照ください。

エラー

開発環境でDB自体を削除するコマンドを実行したところ、、、

$ rails db:drop

エラーActiveRecord::ProtectedEnvironmentErrorが出ました。。。

このエラーの意味は、

本番環境のDBを操作しようとしているが問題ないですか?

という警告のようなもので、環境変数を入れると操作を続けることができるよ。と言ってます。

そもそも開発環境なんですけど、なんで本番環境と出るんですか??

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
bin/rails:4:in `<main>'
Tasks: TOP => db:migrate:reset => db:drop => db:check_protected_environments
(See full trace by running task with --trace)

結論

先に結論から書いてしまいますが、

Rails5では MySQLに環境変数を格納しており、本番環境のデータをそのまま開発環境に入れたことにより、MySQLの環境変数に本番環境の変数が格納されてしまったため、上記のエラーがでてしまいました。

なので、解決する方法としては、MySQLの環境変数を本番環境のものから開発環境のものに書き換えればいいということです。

解決手順

MySQLに接続します。

$ mysql -h db -u root -p

存在するデータベースを確認します。

$ show databases;

対象のデータベースを指定します。

$ use *******;

データベースないのテーブルの一覧を表示します。

$ show tables;

テーブル一覧の中にar_internal_metadataがあると思います。
この中に、環境変数を格納しています。

+---------------------------------------------------+
| Tables_in_scm_development                         |
+---------------------------------------------------+
| ar_internal_metadata                              |
| ...                                               |
+---------------------------------------------------+

ar_internal_metadataの中身をみてみると、

$ select * from ar_internal_metadata;

見つけましたproductionの文字を。

+-------------+-------------+---------------------+---------------------+
| key         | value       | created_at          | updated_at          |
+-------------+-------------+---------------------+---------------------+
| environment | production  | 2020-01-10 09:37:29 | 2020-01-10 09:37:29 |
+-------------+-------------+---------------------+---------------------+

このproductiondevelopmentへ修正します。

$ update ar_internal_metadata set value='development'

もう一度、ar_internal_metadataの中身をみてみると、

$ select * from ar_internal_metadata;

環境変数はdevelopmentに変更できました。

+-------------+-------------+---------------------+---------------------+
| key         | value       | created_at          | updated_at          |
+-------------+-------------+---------------------+---------------------+
| environment | development | 2020-01-10 09:37:29 | 2020-01-10 09:37:29 |
+-------------+-------------+---------------------+---------------------+

MySQLから抜けて

$ exit

もう一度、DBを削除するコマンドを実行。すると成功しました!

$ rails db:drop

まとめ

つらつらと手順を書いたので、人によっては理解しづらいかもしれませんが、困っている誰かの役に立てばなーと思います。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0