じろう
学習履歴詳細
[Laravel]メンターさんとMTGしながらDockerのエラー解決。カスタムエラーページが表示されないバグ修正。ArticleRepositoryのメソッドのユニットテストを書く。
今日のYWT
やったこと
Travelog
Dockerのエラーの解決
docker-compose upやdocker-compose buildのときは、使うコンテナを指定する
phpの設定
- 本番環境での
PostTooLargeExceptionエラーをローカルで再現するため、post_max_sizeやmax_file_uploadsの値を書き換えて本番と同じ数値にした
独自エラーページを表示する
- 作った独自エラーページが本番環境で表示できなかったのを直す
- nginxの
nginx.confを書き換えて解決
- nginxの
UnitTestを書く
ArticleRepositoryのgetAllArticleをテストするUnittestを書いた- そのタイミングで、
getAllArticleでcreated_atの降順にArticle全件取得するコードについて見直した - また、
getAllArticleで全件取得しようとするも、1件も無い時のテストも書いた
わかったこと
Laradockでのphpの設定をどこから見るか
今までは、docker-compose exec workspace bashでコンテナに入ったつもりになっていたが、ローカル環境で使われている設定を見るにはdocker-compose exec php-fpm bashで入る必要がある
また、laradockのphp-fpmディレクトリ内にあるlaravel.iniを書き換えたら、docker-compose downしてdocker-compose build php-fpmしないと、書き直したところが反映されない。
そのあとに、起動したいコンテナを指定する形でdocker-compose up -d workspace php-fpm postgres nginxでコンテナ再起動をかける
phpの設定を見る
phpinfo();を適当なコントローラ(ログインが必要じゃないindexとか)に書くだけ
本番環境で独自エラーページが表示できなかった理由
nginxが、laravelに処理行く前にnginx側の処理で404ページを表示させていた→laravelの処理が走らないのでカスタマイズエラーページも表示されない
これは、該当するコードをすべてコメントアウトすることで解決
# error_page 404 /404.html; # # error_page 500 502 503 504 /50x.html;
UnitTest
今まで書いていたのはfeatureTestだったが、ユニットテスト(クラスやメソッド単位のテスト)を書く
対象はRepositoryに切り出したメソッド等
assertEqualは型まで見る。 assertSameは型は見ない
Collectionにも種類がある
Illuminate\Database\Eloquent\CollectionがEloquentのCollection
Illuminate\Support\Collectionは上の継承元のCollection
テストで検証するとき、この二つの型は違うものとみなされるので、toArray()などとして変換をして型を揃えてあげる必要がある
getAllArticleのリファクタリング
// $articles = Article::all() // ->sortByDesc('created_at') // ->load(['user', 'likes', 'tags', 'photos']); $articles = Article::query() ->with(['user', 'likes', 'tags', 'photos']) ->orderBy('created_at', 'desc') ->get();
上のコメントアウトしたコードではCollectionに対する操作で、sortByDescやloadなども結局foreachで回しているので処理が遅い。
下のコードはDBでの処理。クエリを発行しているので処理が早い。
次やること
- CircleCIにかけてどうなるか見る……
2020年12月01日(火)
4.6時間