LoginSignup
2
2

More than 3 years have passed since last update.

Capistrano自動デプロイ設定時(初回)に出たエラー「Mysql2::Error: Table 'users' already exists」の解決方法

Posted at

アプリを本番環境に上げる際に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する方法!



デプロイは難しいですね。ですがコーディングと同様にエラーのたびに理解が深まるので知識が積み重なってく感じがすきです。頑張りましょ〜

2
2
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
2
2