質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

解決済

1回答

1082閲覧

LaravelをAWS EC2にデプロイ後、ヘルパ関数が反映されない。

sanma_t

総合スコア2

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

0クリップ

投稿2021/04/16 04:41

バージョン
Amazon Linux 2 AMI
PHP 7.3.27
Laravel Framework 6.20.12

##内容
デプロイ後、HTMLなどの文字情報はブラウザで表示することができました。

ローカル環境では動いていた、assetや、link_to_routeなどの機能が反映されなくなりました。
httpsではなくhttp接続です。
原因としては何が考えられるでしょうか?

laravelcollectiveはインストール済です。

どうぞよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbeTakashi

2021/04/16 04:54 編集

「assetや、link_to_routeなどの機能が反映されなくなりました」だけでは実際に何が起きてるのか他の人には分かりません。画像が表示されないとか、JavaScriptが動かないとか、リンク切れが発生しているとかでしょうか? その辺の説明はしっかり追記した方が良いと思います。 かなりエスパー的な回答になりますが、.envの設定を見直すとかcomposer installなどを再度してみるとか、キャッシュをクリアするとかくらいでしょうか。WEBブラウザのソースを見れば、なぜリンク切れなのかとか分かりますよね? 404になっていたら、何かしらのパスの設定が間違っているとかかもしれません。nginxとphp-fpm使っているのであれば、その辺の設定がミスってるとかもあるかもしれませんが、その辺の環境も全然記載されてないですのでなんともです。WEBサーバのログなども解決のヒントになるかもしれません。 全体的に情報が足りないので、ピンポイントなアドバイスがくることはなさそうな気がします。明示できる情報があれば追記をお願いします。
kitar

2021/04/16 05:52

TakashiAbeさんとやや重複しますが、 - デプロイ先では `asset()` や `link_to_route()` の出力結果(恐らくHTMLのソースを覗くと確認できます)は何になっているか? - Laravelのログに関連しそうなエラーは出力されていないか? あたりがわかると回答がつきやすくなるかと思います。
sanma_t

2021/04/16 07:16

説明不足でお手数をおかけしてすみません。また、ご回答頂きありがとうございます。 ヘルパ関数が反映されず、画像が表示されなかったり、CSSが反映されず文字情報のみのようになっています。 Webブラウザのソースを確認してみました。 <link href="{{ asset('css/style.css') }}" rel="stylesheet">の該当部分は、 <link href="https://【IPアドレス】/css/style.css" rel="stylesheet"> →httpで接続していましたが、こちらはhttpsになっていました。何か関連性はありますでしょうか? Laravelのログに関連しそうなエラーは見当たらないのですが、 ディベロッパーツールのconsoleにはFailed to load resource: net::ERR_CONNECTION_TIMED_OUTというのは表示されています。
kitar

2021/04/16 07:30

なるほど、ありがとうございます。 考えられる原因をこのあと回答に記載しますが、先ほど追加で頂いた情報はよろしければご質問本文に反映して頂けるとよろしいかと思います。(後から見た人が分かりやすいので)
guest

回答1

0

ベストアンサー

asset() は機能しているが、出力結果が http ではなく https なのでリソースが見つからず Failed to load resource となっているように見受けられます。

asset() 関数は 第二引数にSSLか否かを指定できる ようですので、 asset('path/to/file', false)としてみるといかがでしょうか?

追記

せっかくなので6.xを入れて試してみたのですが、インストール直後にhttpでアクセスすると asset()link_to_route() もデフォルトで(上述の第二引数などなしで)httpのURLを返すようでした。

なお、 asset() はLaravel本体のヘルパ関数、 link_to_route() はLaravelCollectiveのヘルパ関数だと理解して試しています。

なにかアプリ全体でhttpsを強制するようなコードを書かれている可能性などはありませんでしょうか?

例えば app/Providers/AppServiceProvider.php に以下のような記述があると、生成されるURLはすべてhttpsに変換されます。

php

1use Illuminate\Routing\UrlGenerator; 2 3class AppServiceProvider extends ServiceProvider 4{ 5 ... 6 public function boot(UrlGenerator $url) 7 { 8 $url->forceScheme('https'); 9 } 10 ... 11}

投稿2021/04/16 07:36

編集2021/04/16 14:00
kitar

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sanma_t

2021/04/16 13:26

アドバイスありがとうございます。リンク、勉強になりました。こういうのがあるのですね。 asset('path/to/file', false)にして動作いたしました。非常に助かりました。 assetに関しては、上手くいったのですが、他のヘルパ関数(link_to_route, route)などもどうやら、https〜でリンク先になっているので、不具合が生じている可能性が高そうです。 その他も,falseやってみたのですが、うまくいかず、他のやり方はありますでしょうか? envのAPP_URLをhttp〜に変更してみたのですが、こちらは変化がなさそうでした。
kitar

2021/04/16 14:02

Laravel Collectiveのドキュメントを見てみましたが、 `link_to_route` についてはhttpを強制するようなオプションはなさそうですね。 アプリ全体でhttpsを強制している可能性を回答に追記したので、ご参考頂けますと幸いです!
sanma_t

2021/04/16 14:09

public function boot() { \URL::forceScheme('https'); }と記載がありました。全て解決できました。ありがとうございました。 また、教えて頂いたアドバイスを手がかりに、web.phpにURL::forceScheme('http');と記載することでうまくいきました。 最後の最後で困っていたので、本当に感謝です。
kitar

2021/04/16 14:17

おお、よかったです! ちなみに恐らくですがURL::forceScheme()は書かなくて良いはずです。 - 本来Laravelは、httpでもhttpsでも実際にアクセスのあったプロトコルに従ってURLを生成するはず - AppServiceProvider側ではhttps, route側ではhttpと二重に指定していると変なバグの原因になりそう ですので。 上手くいかなければ、AppServiceProvider側だけでforceScheme(‘http’)するなどご検討されると良いかと思います。
sanma_t

2021/04/16 21:07

Laravelの特性として、プロトコルに従って生成するのですね。 AppServiceProviderでforceScheme(‘http’)にのみすることでも、問題なく動作いたしました。 こちらで運用したいと思います。 ありがとうございました!! 諦めかけていたましたが、teratailを利用することになり、 こうやって前に進むことができて本当によかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問