LoginSignup
3
2

More than 3 years have passed since last update.

HerokuからAWSに本番環境を移行する際に詰まったこと。

Last updated at Posted at 2019-11-18

はじめに

MAMP環境で作成したLaravelプロジェクトをHerokuにデプロイしてたのですがAWSの学習をかねて本番環境を移行してみました。

環境

  • 開発環境
    • PHP 7.3.6
    • Laravel 5.8.35
    • MAMP
  • 本番環境
    • Heroku
  • 移行する本番環境
    • AWS
      • EC2(Amazon Linux 2 AMI)
      • RDS(MySQL)

詰まった点

EC2にプロジェクトをgit cloneしブラウザでプロジェクトが開ける状態が出来、RDSのMySQLに

php artisan migrate

コマンドでテーブルを作成できたら完成!、、というところでエラー発生

Illuminate\Database\QueryException  : SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema =  and table_name = migrations and table_type = 'BASE TABLE')

  at /var/www/html/namilog/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }
    668|

  Exception trace:

  1   PDOException::("SQLSTATE[HY000] [2002] No such file or directory")
      /var/www/html/<app名>/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=", "<db名>", "<パスワード>", [])
      /var/www/html/<app名>/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  Please use the argument -v to see more details.

エラーの詳細をみてみるとException traceの2にMAMPで開発を行なった際のunix_socketが指定されている。

 PDO::__construct("mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=", "<db名>", "<パスワード>", [])
      /var/www/html/<app名>/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

調べてみると、unix_socketはlocalhost内で通信を行う際に必要なものらしくて、今回はEC2のIPアドレスで通信を行うので必要ないことがわかりました。
なのでlaravelプロジェクトのconfig/database.phpファイル内のunix_socketのパスを削除。

database.php
~省略~
'mysql' => [
           ~省略~
          'unix_socket' => env('DB_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'),
           ~省略~
]
~省略~

その後改めてphp artisan migrate を実行するとうまくテーブルが作成されました。

間違って解釈している可能性があるので異なっている点がありましたら指摘してくださるとありがたいです。

参考にした記事

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