本番環境でももう一度マイグレーションを実行する必要あり

## はじめに
本番環境へのデプロイをしようとしていたところで、500エラーが。

ログを見てみると「usersテーブルが存在しません」と言われました。

「おかしいな、ローカルでちゃんとマイグレーションファイルを実行したのに」と思っていましたが、

本番環境でも最初にマイグレーションファイルを実行する必要があったそうです。

## 環境
Laravel 9.52.16
flyctl v0.1.141（デプロイ環境）

## 問題
* 本番環境のユーザ登録画面で「登録」をクリックすると、500server errorが表示される

![c13e367ae1173c564a13d9879541f314.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620668/c979702f-886e-a7fa-0daf-13cc7bbffc3d.png)

![c8b3700b2969f7b6d99d416776a8a442.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620668/f9726119-4f51-50e8-29c6-ff44c423d9c4.png)

* fly.ioを使ってデプロイしようとしていたので、「fly logs」でログを確認してみる

```
root@:/var/www/html/niches# fly logs 
2024-01-15T10:48:04Z app[32875165a1ede8] nrt [info]{"message":"SQLSTATE[42P01]: Undefined table: 7 ERROR:  relation \"users\" does not exist\n
LINE 1: select count(*) as aggregate from \"users\" where \"email\" = $1\n                                                                    
```

まとめると「usersテーブルが見つかりません」とのこと。


## 解決法
* 本番環境でマイグレーションファイルを実行する

ローカルで実行していればいいと勘違いしていましたが、しっかり本番環境でもマイグレーションファイルを実行しなければいけませんでした。

Fly.ioの場合、デプロイされたアプリケーションのインスタンスにSSHで接続して、マイグレーションを実行します。

```terminal
root@:/var/www/html/niches# flyctl ssh console
Connecting to fdaa:3:1097:a7b:22e:f109:50e6:2... complete
root@:/var/www/html# php artisan migrate

                                                                                                           
                APPLICATION IN PRODUCTION.                                         
                                                                                                           

  Do you really wish to run this command? (yes/no) [no]
❯ yes

   INFO  Preparing database.  

  Creating migration table .................................................................... 23ms DONE

   INFO  Running migrations.  

  2014_10_12_000000_create_users_table ........................................................ 18ms DONE
  2014_10_12_100000_create_password_resets_table .............................................. 10ms DONE  
  2019_08_19_000000_create_failed_jobs_table .................................................. 21ms DONE
  2019_12_14_000001_create_personal_access_tokens_table ....................................... 14ms DONE
  2023_12_11_011438_create_caterories_table .................................................... 7ms DONE
  2023_12_11_011938_create_purchase_orders_table .............................................. 10ms DONE
  2023_12_11_011938_create_sales_orders_table .................................................. 7ms DONE
  2023_12_11_011938_create_user_details_table .................................................. 5ms DONE  
  2023_12_12_114633_modify__table_name_of__categories_table .................................... 4ms DONE  
  2023_12_19_100616_create_message_rooms_table ................................................. 4ms DONE
  2023_12_19_100927_create_messages_table ...................................................... 9ms DONE
  2023_12_19_134354_create_message_room_user_table2 ........................................... 14ms DONE
  2023_12_26_095445_create_user_follow_table .................................................. 12ms DONE
  2024_01_01_132235_add_category_budget_schedule_to_sales_orders_table ......................... 4ms DONE  
  2024_01_13_150344_delete_columns_from_sales_orders_table ..................................... 1ms DONE  
  2024_01_13_150755_add_category_id_columns_to_sales_orders_table .............................. 5ms DONE  
  2024_01_13_155435_add_category_id_column_to_purchase_orders_table ............................ 6ms DONE

```

## おわりに
ローカルで実行したマイグレーションはローカル環境のデータベースにのみ反映されます。

そして本番環境のデータベースには自動的には反映されません。

本番環境とローカル環境は完全に分離されており、それぞれ独立したデータベースを持っています。

なので、本番環境とローカル環境の間でデータベースの状態を同期させたい時は、

マイグレーションファイルを両環境で実行する必要があります。