
じろう
学習履歴詳細
[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時間