20210418のlaravelに関する記事は6件です。

500 server error エラーの原因を確認する方法

はじめに AWSでデプロイした際に本番環境のみ上記のエラーが出ました。また、ローカルでも同じエラーも出たことがありました。500 server errorと表示されるだけでエラーの原因が分からず手探り状態になりました。これを解消するためにlogsファイルを使用してエラーの原因を突き止める方法を投稿いたします。 条件 envファイルを作成・編集以外の対処になります 投稿者の環境 MacBook Pro (13-inch, 2019, Two Thunderbolt 3 ports) macOS Big Sur バージョン11.0.1 PHP 7.3.23 Laravel Framework 6.20.7 エラー画像 現役エンジニア曰く、始末書を書かされるぐらい致命的なエラーみたいです・・・ エラーの原因を探る方法 今回はlogファイルを使用しエラーの原因を突き止めます。 ターミナルを起動して下さい。本番環境のみ500 server errorが出る方はEC2を立ち上げて下さい。 ステップ1 問題のあるwebアプリケーションをディレクトリ先に移動して下さい。 cd /Applications/MAMP/htdocs/webアプリケーション名 ステップ2 logsファイルにディレクトリ先を変更。 cd storage/logs ステップ3 catでファイルの閲覧を表示させます。laravel.logはlogsファイルの中にあるファイル名になります。 cat laravel.log ステップ4 上記を実行するとlaravel.logのログの一覧表が大量に出てきます。#0から#60ぐらいまで出ると思いますが#0までスクロールして下さい。その上にエラー文が表示されていると思います。これを解決したら500server errorを解決できると思います。複数エラー出ている可能性もありますので一つずつ対処して下さい。投稿者はこの様なエラーが出ました。 補足 logとは アプリケーションは、1つのリクエストを取っても様々な処理が行われており、機能を維持しつつ拡張していかなければいけません。そのためにアプリケーションの状態を記録として残しておくことがログの役割です。 処理の中で適切にロギングすることで、開発する上で重要な情報を得ることができます。身近なことでいうとデバッグです、「この入力の時にこの処理起こるのおかしいな?どんな値として渡されているんだろう?」などロギング処理を埋め込むことで処理途中のアプリケーションの状態の一部を確認することができます 最後に 如何でしょうか? envファイルを作成・編集する投稿が多いですがこの様な対処のQiitaはないと思いますので是非、参考にして下さい! 参考文献 Laravel自体で発生したエラーのログはどこにでていますか? ログを表示!Laravelでlogを出力させる方法【初心者向け】
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel】アクセサを使う

はじめに 例えば、ユーザーの投稿数を取得したい時がある。 その場合、Laravelのアクセサを使えば、テーブルのカラムのように簡単に取得することができる。 アクセサを使う 先程の例でいくと、アクセサを使わない場合はこんな感じで記述する。 view {{ $user->posts()->count() }} このままだと少し冗長でわかりにくいので、アクセサを使い、シンプルにする。 アクセサを使うときは、モデルにget~Attributeというメソッドを作成する。 User.php namespace App\Models; use Illuminate\Database\Eloquent\Model; class User extends Model { // 省略 /** * 記事の投稿数を取得 * * @return integer */ public function getCountPostsAttribute() { return this->posts->count(); } } このアクセサをControllerやviewで呼び出す場合は、getとAttributeを取り除いたスネークケースで記述する。 view {{ $user->count_posts }} モデルのプロパティ(テーブルのカラム)のように使えるので、シンプルでわかりやすい。 おまけ JSONレスポンスの場合は、$appendsを定義する必要がある。 /** * モデルの配列形態に追加するアクセサ * * @var array */ protected $appends = ['count_posts']; // 追加 /** * 記事の投稿数を取得 * * @return integer */ public function getCountPostsAttribute() { return this->posts->count(); } 参考 https://readouble.com/laravel/7.x/ja/eloquent-mutators.html https://qiita.com/shonansurvivors/items/cd7ee1c038f9543eab8f
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel レコードが存在しているかを確認する 個人メモ

目的 当該のレコードが存在することをクエリビルダーで確認する方法をメモ的にまとめる 方法 クエリビルダーにexists()を追加することでレコードの存在を確認できる。レコードが存在していた場合はtrueを、存在していなかった場合はfalseを返す。 下記に例を記載する。 return $this->Memo ->where('workspace_id', $workspace_id) ->exists();
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【個人開発】パチンコ・パチスロの写真共有サービスを開発しました?

初めに pMemoriesというWebサービスを開発しました。 唐突にパチンコ・パチスロの画像を自慢したくなった&他人の自慢の一枚を見たくなったので作ってみました。 pMemoriesで何できるの?? pMemoriesはパチンコ・パチスロの思い出を共有できるWebサービスです。 みなさんのスマホの中にある自慢の自慢の一枚を投稿してください! ※いたずら投稿は悲しくなってくるのでやめてください>< 使用した技術 フロントとバックエンドをざっくり紹介します。 Nuxt.js フロントはNuxt.jsを使用しています。 ルーティング等が楽でとてもいいフレームワークですね・・・大好きです。 Laravel バックエンドはLaravelを使用しています。 こちらは業務等で使用して慣れているので使用しましたが、その内違う言語・フレームワークに変更することも考えています。 今後について 今回超短期間で開発したのでまだ「いいね」や「コメント」等のコミュニケーション機能は未実装、デザインも仮です。 今から開発していきますので期待して待ってくださると幸いです。(とりあえず出したかったんです!)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Docker】Laravelのレスポンス改善

はじめに Docker上にLaravel環境を作成して開発をしていました。 なんてことないリクエストの処理に10秒程度かかることもあり、原因を調べてみたところDockerの設定に問題があるようなので対策をしました。 環境 Windows 10 Docker for Windows PHP 8.0.3 Laravel 8.5.15 ディレクトリ構成 . ├── app # アプリケーションのソース(Laravel) ├── docker-compose.yml └── infra # Dockerfile等の設定ファイル 原因 ホスト側のvendorディレクトリをマウント(バインドマウントと言うらしい)しているのが原因でした。 対策 名前付きボリュームを利用します。 docker-compose.yml version: '3.5' services: php: build: ./infra/php image: performance_test_fast container_name: performance_test_fast environment: VIRTUAL_HOST: 'fast.localhost' CERT_NAME: 'localhost' volumes: - ./app:/var/www/html - ./infra/apache/000-default.conf:/etc/apache2/sites-enabled/000-default.conf - vendor-store:/var/www/html/vendor # 追加 networks: - performance-fast-network - proxy-network networks: performance-fast-network: name: performance-fast-network proxy-network: external: true name: proxy-network volumes: # 追加 vendor-store: # 追加 結果 目で見てわかるレベルで速度が改善されました。 改善前 改善後 5100ms 137ms 最後に 今までとりあえず動けばいいやという感覚で設定していたので、これを機にDockerの設定ファイルの見直しをしていきたいと思います。 間違いや改善点があればコメントにて教えていただければ幸いです。 参考 ボリュームの利用 Docker の Volume がよくわからないから調べた Docker Composeのvolumesを使ってもっと効率的に
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelのログフォーマットを変更したらスタックトレースが出力されなくなった

環境 PHP 7.4.16 Laravel 8.34.0 何が起きたか Laravelでログのフォーマットを変更するためにapp/Logging/CustomizeFormatter.phpを以下のように設定しました class CustomizeFormatter { /** * @param \Illuminate\Log\Logger $logger * @return void */ public function __invoke($logger) { foreach ($logger->getHandlers() as $handler) { $handler->setFormatter(new LineFormatter( "%level_name%[%datetime%] url:%extra.url% http_method:%extra.http_method% context:%context% class:%extra.class% function:%extra.function% message:%message% \n", 'Y-m-d H:i:s', true )); $handler->pushProcessor(new WebProcessor); $handler->pushProcessor(new IntrospectionProcessor(Logger::ERROR, ['Illuminate\\'])); } } } これによってログのフォーマットの変更と追加情報の出力には成功したのですが、 エラー時にスタックトレースが出力されなくなってしまいました。 解決 LineFormatterクラスは以下のようにスタックトレースを含むか否かを定めるメソッドが存在することがわかりました public function includeStacktraces(bool $include = true) { $this->includeStacktraces = $include; if ($this->includeStacktraces) { $this->allowInlineLineBreaks = true; } } なんだ!メソッド呼んだらいいんじゃん!!ということでコードを以下のように書き換えて修正完了です public function __invoke($logger) { $format = new LineFormatter( "%level_name%[%datetime%] url:%extra.url% http_method:%extra.http_method% context:%context% class:%extra.class% function:%extra.function% message:%message% \n", 'Y-m-d H:i:s', true ); $format->includeStacktraces(true); foreach ($logger->getHandlers() as $handler) { $handler->setFormatter($format); $handler->pushProcessor(new WebProcessor); $handler->pushProcessor(new IntrospectionProcessor(Logger::DEBUG, ['Illuminate\\'])); } } 無事にエラー時にはスタックトレースがログに出力されるようになりました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む