ローカル環境ではちゃんと表示出来ているのに本番環境でページが表示されない!
がーん!!!
他のページは表示されてるのに・・・
気を取り直して、状況を整理して原因を特定してみる
1,デプロイ自体は上手くいっている? ので他のページは表示されている
2,特定のページだけ表示されていない
3、しかしローカルではちゃんと表示されている(ここ重要)
以上から なんとな〜く 特定のページに対して ローカルと本番環境で何か相違が起きてると想像する。
例えばbundler のバージョンが ローカルと本番環境で異なっている場合 全体のデプロイが上手くいかないはずなので おそらく該当のページに対して 何らかのエラーなんだろうな〜
と考えてみても仕方ないので catコマンドでproductionログを見てみることにする
cat /var/www/(アプリ名)/current/log/production.log
膨大なログをずーーーーっと眺めていると・・・
あっ FATAL(エラー)表示を発見した。
ふむふむ 「商品の状態」 近辺でエラー発生とな
商品の状態ってここのことですな

あーこの表示作って データを送信出来るようにモデルとマイグレーションファイル修正したわ〜
と思い

:status って カラム名:state を変更したんだっけな あとint型に変更したな〜 と思いつつ
ここで気が付いた!
本番環境のデータベースそのままやんけ と。
すぐに本番環境のmysqlを確認
mysql -u root -p
データベースを見る
show databases;
データベースを指定して
use データベース名_production;
テーブルを確認
show tables;
テーブルの中身を確認
show columns from テーブル名;
で確認しました
あった
:statusに変えたはずのカラムが本番環境では :stateのままでした。
ローカル環境と本番環境でテーブルの中身が違うと本番環境では正しく表示されない
原因特定に成功した
では次にどうするか
本番環境でrails db:migrate を繰り返しても全然migrateされない
ま〜考えてみれば本番環境のデータベースが簡単にポンポン書き換えされちゃったら混乱するだけだから もうちっとmaigrateの方法を考えねば。
で僕が 取った方法は
本番環境のDBを一旦リセットして もう一度作り直す!
うぉおおおおおーーーー!やってやんぜ! 本番環境のDBをぶっ壊す!
状況説明が長くなりましたが ここから本題
本番環境のデータベースをリセットする
RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop
ポイントです
意図的にproduction environmentのDBを破壊したい場合は、
環境変数 DISABLE_DATABASE_ENVIRONMENT_CHECK=1指定してあげればOKです。
DBの破壊系はコマンド実行を防止する機能がRails5以降は装備されているため
db:drop
db:drop:all
db:purge
db:purge:all
db:purge:test
db:schema:load
のコマンドはDISABLE_DATABASE_ENVIRONMENT_CHECK=1が必要です
本番環境のDBの破壊に成功した後は DBを作り直す作業
rails db:create RAILS_ENV=production
本番環境でマイグレーション
rails db:migrate RAILS_ENV=production
無事本番環境のデータベース再構築完了です。
2026年3月 追記(最新情報)
この記事は2020年1月に投稿されました。以下に2026年3月時点の最新情報を追記します。
コマンドの変更
-
rake→railsコマンド推奨: Rails 5以降、rake db:dropではなくrails db:dropが推奨されます -
rails db:prepare: 新しく追加されたコマンドで、DBがなければ作成、あればマイグレーションを実行します。CI/CDパイプラインでの使用に最適です
セキュリティに関する重要な注意
本番環境での db:drop は最終手段です。実行前に必ず:
-
バックアップを取得する(
mysqldumpやpg_dumpでフルバックアップ) - ステージング環境で検証する
- チームメンバーに周知する
DISABLE_DATABASE_ENVIRONMENT_CHECK=1 はRails 8でも引き続き有効ですが、このフラグを使う状況自体を避けるべきです。
推奨される代替アプローチ
DBを完全に作り直すのではなく、以下を検討してください:
- マイグレーションファイルで差分を管理する
-
rails db:migrate:redoで特定のマイグレーションをやり直す -
rails db:reset(schema.rbからの再構築)を使う


