ご挨拶 〜"Mysql2::Error:TableAlreadyExists"を添えて〜

#はじめに　
やあ。初投稿です。安彦と申します。
アウトプットの一環でQiitaを始めることにしました。
簡単な自己紹介をしますと，

エンジニア歴**０年**。

。。。つまり少々大きいエンジニアの赤ちゃんです。新卒で飲食業の某社にて２年働いていましたが，大学時代から興味のあったプログラミングへの炎が燃え上がりましてに，エンジニア業界への転職を志しました。

退職して思うことはいま一番生気溢れてます。自分がいなくても会社は回ります。同僚に「いまここやめたら店が壊れるからやめられない」と言ってた人がいます。この場を借りて言わせていただくと，**そんなことありません，そこに介入しない会社に原因がある。自分の人生を会社に隷属して無駄にして，さらに掛け替えのない２０代を思うように使えない方がよっぽどあなたらしくなれない。**自身を磨いた結果，会社も盛り上がる，そっちの方がより自分らしくなれると思いませんか。

そんな訳でエンジニアとして生きていくため，今年二月中旬より自己投資としててっくきゃんぷ７２期に参加させていただいております。執筆している現在，就職活動中です。てっくきゃんぷのことで聞きたい方，メッセージを頂ければ機密事項を侵さない程度に回答します。

ここの用い方としては日々の学びのアウトプット，備忘録として用いていきたいなと思います。日常生活に関してはtwitterで更新しています。自身の発信により，**同じ悩みを抱えていた人が１分でも早く悩みを突破できる記事**をコンセプトに頑張っていきます。ただし，一次ソースでないことは重々承知を。

#本題　自動デプロイ時にmysqlのエラーが発生する（Rails）
さて今回触れるのは
「Mysql2::Error: Table 'aaaa' already exists」
原因　
本番環境にすでにデプロイしている状態でローカル環境でDBをいじったため，本番環境と齟齬が生じマイグレーションできなかった？
アクション
本番環境のmysql内のDB再構成
[mySQLコマンド参考記事](https://qiita.com/k_s/items/6fbd2ca409d876858b29)

実際のエラーをみてみましょう
環境　AWS，unicorn,nginx,mysqlなどインフラ環境は割愛します。
rails 5.2.3
ruby 2.5.1

ローカルサーバー
bundle exec cap production deploy
を打った際に順調に進んでいたけど、、、

```terminal

 deploy:migrate
      [deploy:migrate] Run `rake db:migrate`
00:26 deploy:migrating
      01 $HOME/.rbenv/bin/rbenv exec bundle exec rake db:migrate
      01 == 20200407054248 CreateGoods: migrating ======================================
      01 -- create_table(:goods)
      01 rake aborted!
      01 StandardError: An error has occurred, all later migrations canceled:
      01
      01 Mysql2::Error: Table 'goods' already exists: CREATE TABLE `goods` (`id` bigint NOT NULL AUTO_...
      01 FOREIGN KEY (`buyer_id`)
      01   REFERENCES `users` (`id`)
      01 , CONSTRAINT `fk_rails_87238b6105`
      01 FOREIGN KEY (`seller_id`)
      01   REFERENCES `users` (`id`)
      01 )
      01 /var/www/freemarket_sample_72g/shared/bundle/ruby/2.5.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:…
      01 /var/www/freemarket_sample_72g/shared/bundle/ruby/2.5.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:…
```

oh,,,(´・ω・｀)

goodsテーブルがすでに存在しているのでマイグレートできませんとのこと。
テスト環境ではrailsでdb:drop,db:create,db:migrateみたいに一回消して作り直せばいける気がしますが、、

、、、本番環境でもできるかなw

さて，本番環境のデータベースの破壊と再生成を行いましょう（）
サーバーからmysqlに入ります

```ec2
 mysql -u root -p
```

データベースの確認を行います

```mysql
 show databases;
```

以下の箱が出てくると思います
+----------------------------------+
| Database                         |
+----------------------------------+
| information_schema               |
| productionX |
| mysql                            |
| performance_schema               |
+----------------------------------+
4 rows in set (0.00 sec)

データベースの名前がわかったので削除します。

```mysql
drop database`productionX`;
```

これで削除が完了しました！

これでデプロイできるかな！！！

```terminal
 ActiveRecord::NoDatabaseError: Unknown database 
```

oh,,,(´・ω・｀)

いくら自動デプロイとはいえDBの生成は自動でやってくれませんね。

ではDB作成をしていきます.mysql内のDB生成は上の参考記事をみてください（一次ソースでない）
サーバー上から作っていけるみたいです。つまり，DB削除もできるのかも。
AWSサーバーにインして自分のアプリケーションのフォルダで

```ec2
rails db:create RAILS_ENV=production
```

これでデプロイ時にmigrateされます。

もし初期値を用意したい場合はrails db:seed　RAILS_ENV=productionを
カレントディレクトリで実行すればいけるみたい。
参考資料↓
https://qiita.com/Sotq_17/items/a091fe92dd64d3cf429b



こんな感じで頑張っていきたいのでよろしくお願いします！フィードバック随時受付中です！
[twwiter](https://twitter.com/silverchair_pg)