アプリを本番環境に上げる際にCapistranoを導入しようとしたら、下記のエラーが出ました。
Mysql2::Error: Table 'users' already exists: CREATE TABLE 'users'
「ユーザーズテープルすでにあるよ」と怒られているようです。
状況を整理
・手動デプロイは上手くいっている。
・Capistranoの【初回デプロイ】(つまりまだ一回も成功していない)でエラーが出た。
・MySQLやusersテーブルについて言及されているので、マイグレーション系のエラーである。
どうやら、本番環境下のマイグレーション関係で問題が起きている模様。
解決法
結論、
ローカル環境で修正したマイグレーションが本番環境で反映されてませんでした。
[ec2-user@ip <リポジトリ名>] 以下で下記コマンドを打って解決
①DBを削除する
ターミナル
RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop
(Railsバージョンによって異なる模様。参考記事参照)
②DBをcreateする
ターミナル
rails db:create RAILS_ENV=production
③DBをmigrateする
ターミナル
rails db:migrate RAILS_ENV=production
■ちなみに、①DBを削除するCapistranoの自動デプロイが成功した後であれば、データベースが「current」に入っていると思われるので「current」で削除を行う模様です(試していません)
■参考記事
Rails5以降の本番環境でデータベースをresetする方法!
デプロイは難しいですね。ですがコーディングと同様にエラーのたびに理解が深まるので知識が積み重なってく感じがすきです。頑張りましょ〜