前提・実現したいこと
herokuへデプロイしたアプリで、S3へ画像保存できるように修正中です。
アプリはlaravel8とdockerで作成されています。
変更点をコミットしherokuへpushした後、アプリURLへアクセスした際にエラーが発生しました。
発生している問題・エラーメッセージ
push前は問題なくアクセスできていたので、直前コミットの内容に原因があるかと考えています。
//アクセスエラー 404 Not Found nginx
//heroku log 2021-10-28T13:48:03.789168+00:00 heroku[web.1]: State changed from down to starting 2021-10-28T13:48:05.890658+00:00 heroku[web.1]: Starting process with command `vendor/bin/heroku-php-nginx -C nginx_app.conf` 2021-10-28T13:48:08.076489+00:00 app[web.1]: Using Nginx server-level configuration include 'nginx_app.conf' 2021-10-28T13:48:08.122874+00:00 app[web.1]: Detected 536870912 Bytes of RAM 2021-10-28T13:48:08.151528+00:00 app[web.1]: PHP memory_limit is 128M Bytes 2021-10-28T13:48:08.158348+00:00 app[web.1]: Starting php-fpm with 4 workers... 2021-10-28T13:48:08.277790+00:00 app[web.1]: Starting nginx... 2021-10-28T13:48:08.478610+00:00 heroku[web.1]: State changed from starting to up 2021-10-28T13:48:09.857974+00:00 app[web.1]: 10.1.45.93 - - [28/Oct/2021:13:48:09 +0000] "GET /login HTTP/1.1" 404 548 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 2021-10-28T13:48:09.858205+00:00 heroku[router]: at=info method=GET path="/login" host=floating-refuge-64986.herokuapp.com request_id=47726ccf-805f-470c-8108-e3979f17c963 fwd="118.1.3.130" dyno=web.1 connect=0ms service=0ms status=404 bytes=691 protocol=http
該当のソースコード
・直前コミット内容
1.default.conf追加
// /laravel-zaikokanri/docker/nginx/default.conf server { listen 80; server_name example.com; root /work/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ .php$ { fastcgi_pass app:9000; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /.(?!well-known).* { deny all; } proxy_buffer_size 32k; proxy_buffers 50 32k; proxy_busy_buffers_size 32k; }
2.Procfile2行目追加
web: vendor/bin/heroku-php-apache2 public/ web: vendor/bin/heroku-php-nginx -C nginx_app.conf
3.envでAWS設定
AWS_ACCESS_KEY_ID=?????? AWS_SECRET_ACCESS_KEY=?????? AWS_DEFAULT_REGION=?????? AWS_BUCKET=??????
4.filesystems.phpでS3設定項目追加
'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL') . '/storage', 'visibility' => 'public', ], 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), ], ],
5.StockControllerのaddDoneメソッド内で、本来はローカルDBに画像保存させていたとこをS3に保存するよう変更。
// /laravel-zaikokanri/backend/app/Http/Controllers/StockController.php public function addDone(Request $request) { $stock = new Stock; //Stockインスタンス作成(保存作業) $form = $request->all(); //保管する値を用意 unset($form['_token']); //フォームに追加される非表示フィールド(テーブルにない)「_token」のみ削除しておく $stock->fill($form); //インスタンスに値を設定 //画像ファイルの保存場所移動 $stock->image = "dummy.jpg"; if ($request->image !== null) { $image = Storage::get('public/tmp/' . $request->image); $path = Storage::disk('s3')->put($request->image, $image, 'public'); $stock->image = Storage::disk('s3')->url($path); } $stock->save(); //インスタンスを保存 return redirect('/list'); }
試したこと
・エラーについて調べて下記サイトを発見。
参考サイト
サイト記載の通り、herokuの環境変数でアプリのURLを設定しなおしてみましたが、変わらずエラーが出てしまいます。
heroku config:set APP_URL= http://floating-refuge-64986.herokuapp.com
今のところ原因が分からず対処に困っているので、もし logやコミット内容で404エラーに関係していそうな箇所があればご指摘お願い致します。
補足情報(FW/ツールのバージョンなど)
docker、laravel8、heroku
あなたの回答
tips
プレビュー