初めに
この記事では、deployerを使った手動デプロイで発生したmigrateのエラーに関してご紹介していきます!
エラー
Dockerコンテナから手動デプロイを実行
→migrateの実行時に「sqliteが存在しない」とエラーで指摘。
[Deployer\Exception\RuntimeException (128)]
The command "cd /var/www/ && (/usr/bin/git clone -b "main" --recursive https://gith
ub.com/yu00212/laravel-zaikokanri.git /var/www//releases/1 2>&1)" failed.
Exit Code: 128 (Invalid exit argument)
Host Name: LaravelWeb1
================
Cloning into '/var/www//releases/1'...
fatal: could not read Username for 'https://github.com': No such device or address
解決手順
今回の環境ではRDSでMySQLをつかっていますが、エラーではsqliteに関して指摘されました。
エラーの内容から、.env
もしくは/config/database.php
でsqliteの指定をしている可能性があると考えたので、EC2上に配置されているファイルを確認してみます。
確認したファイルのフルパスはこちらです。
/var/www/アプリディレクトリ/.env
/var/www/アプリディレクトリ/config/database.php
[ec2-user@ip-172-31-33-88 backend]$ cat .env
DB_CONNECTION=mysql
DB_HOST=????
DB_PORT=????
DB_DATABASE=????
DB_USERNAME=????
DB_PASSWORD=????
[ec2-user@ip-172-31-33-88 config]$ cat database.php
'default' => env('DB_CONNECTION', 'mysql'),
確認しましたが問題なくmysqlの設定がされていますね。。。
エラー文をもう一度読んでみると、/var/www//releases/1'...
のパスが気になります。
クローンしたのは/var/www/アプリディレクトリ/のはず?
メンターに相談したところ、どうやら.envを他のディレクトリに配置しないといけないようです。
EC2でLaravelを使っている場合、EC2上の/var/www/下には/shared
というディレクトリが作成されています。
ここに.envを配置させてあげる必要があるとのことなのでさっそく実施!
[ec2-user@ip-172-31-33-88 www]$ ls #sharedディレクトリありますね!
cgi-bin html laravel-zaikokanri release releases sample shared
[ec2-user@ip-172-31-33-88 www]$ chmod 777 shared #書き込みできるように権限の変更
[ec2-user@ip-172-31-33-88 www]$ ls #権限が変更できてれば、sharedが紫文字から緑に変わってます
cgi-bin html laravel-zaikokanri release releases sample shared
[ec2-user@ip-172-31-33-88 www]$ cd shared
[ec2-user@ip-172-31-33-88 shared]$ touch .env
[ec2-user@ip-172-31-33-88 shared]$ vi .env #アプリディレクトリと同じ内容で.envを編集
では、コンテナから再度デプロイしてみます!
root@5dfb0b5f66db:/work# ./vendor/bin/dep deploy LaravelWeb1 -vvv
・
・
・
Successfully deployed!
デプロイが成功しました!
.envの配置場所が違っているということには中々気づきずらいかと思うので、是非参考になれば幸いです!