LoginSignup
3
6

More than 3 years have passed since last update.

Capistranoでの自動デプロイでエラーが起きた際の対処方法(migration error)その2

Last updated at Posted at 2020-01-18

この記事について

 この記事では、自身がRailsで開発しているアプリをCapistranoでデプロイをしようとした時にエラーが発生し、解決するまでに試した作業を書いています。
 同様のエラーが起きた際に自分が読み返すために書いていますが、他の方の参考にもなれば嬉しいです。
 前回の記事と同じような状況ながら違う原因でエラーが出ていたので、別の記事として書くことにしました。

エラーが起こった時の状況

 Capistranoで自動デプロイを実行したがエラーのため完了でしませんでした。
 エラーの内容を確認してみると、以下のように書かれていました。

00:15 deploy:migrating
      01 $HOME/.rbenv/bin/rbenv exec bundle exec rake db:migrate
      01 rake aborted!
      01 StandardError: An error has occurred, all later migrations canceled:
      01
      01 Mysql2::Error: Table 'users' already exists: CREATE TABLE `users` (`id` bigint NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` var…

 まだまだエラー表示は続きますが、要は「migrationでuserテーブルを作成しようとしたが、userテーブルが既に存在するので実行できません」ってことですね。
 チーム開発をしている状況で、migrationファイルが変わってしまって上手くマイグレーションできなかったものと思われます。今後も開発中にチームメンバーの更新によって変更が発生する可能性も無くはないでしょうか。

解決までの作業

 今回のエラーはmigrationファイルと現状のデータベースで齟齬が発生してしまったため起こったものと考えられます。
 そこでデータベースを一度削除し、1からマイグレーションを行うことで解決できると考えました。

サーバー環境のMySQLに接続し、既存のデータベースを削除する

ターミナルからawsにアクセスし、データベースを操作するためにMySQLに接続します。

mysql -u root -p

 パスワードを入力すればMySQLへの接続が完了します。接続できたら既存のデータベースを削除します。まずは削除するデータベースを確認します。

show databases;
# 実行結果
+--------------------+
| Database           |
+--------------------+
| information_schema |
| sample_production  |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

 データベースの名前が確認できたら、そのデータベースを削除します。

mysql> drop database`sample_production`;
# 実行結果
Query OK, 9 rows affected (0.07 sec)

これで既存のデータベースは削除されました。

データベースを再作成する

 データベースがないままだと自動デプロイができませんので、削除した後は再びデータベースを作成します。
 MySQLからの操作でも作成できそうですが、今回はawsからの操作で作成します。

mysql> quit

[ec2-user@ip-111-111-111-111 sample]$ rails db:create RAILS_ENV=production

マイグレーションを実行する(自動デプロイを実行)

bundle exec cap production deploy

 以上です。今回はこの作業で自動デプロイができるように復旧できました。

3
6
1

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
3
6