0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravel12のappをRender.comでデプロイしたら、Tailwind CSSが崩れた話【デバッグの細道】

0
Posted at

概要

Laravel12で、学習がてらメンバー限定の掲示板appを個人開発しました。
Render.com(Web Service)× Neon(DB)を使用して無料枠でデプロイ。
その際にTailwind CSSが崩れた件について、デバッグの記録です。

実行環境

  • Laravel12
  • PHP 8.2.8
  • Tailwind CSS 4.1
  • Docker(Dockerfile)
  • FrankenPHP(PHPアプリサーバー)
  • Render.com(アプリケーションの実行環境:PaaS)
  • Neon(サーバーレスPostgreSQL:DB)

問題点

Render.com でいろいろあったものの(前回の記事参照
無事にRender.comのログに「Your service is live 🎉」の文字が(嬉)。
Available at your primary URL をブラウザで開いてみると、Tailwind CSSが崩れて表示されている‥(無念)。

デバッグ結論

「Mixed Content(混合コンテンツ)」 と呼ばれる現象によって、CSSの読み込みが拒絶されていた。
httpsのページなのにhttpのCSSを読み込もうとしていた。
Render.com側の環境変数だけではなく、Laravel側にも強制HTTPSのコードを追加して解決。

デバッグの細道(解決に至るまでの流れ)

CSSの表示に関することなので、まずはデプロイしたサイトをブラウザからデベロッパーツールで確認。

すると‥コンソールに
「(インデックス):1 Mixed Content: The page at 'https://trioboard.onrender.com/'
was loaded over HTTPS, but requested an insecure stylesheet
'http://trioboard.onrender.com/build/assets/app-DsiBOfCy.css'.
This request has been blocked; the content must be served over HTTPS.」
とエラー。
なぜかstylesheet がブロックされている???(何故に)。

「Mixed Content」について、AIティチャーに相談と解説を依頼。
Renderの環境変数を確認、とのこと。
実際確認してみると、APP_URLはHTTPS にしている。のに!?

念のため、Laravel側で強制HTTPSとのことで、ローカルの方で以下のコードを追加。

app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\URL;

    public function boot(): void
    {
        // 全ての準備が完了した後に実行される(実際に動かす)
        if(app()->environment('production')){
            URL::forceScheme('https');
        }
    }

その後、キャッシュをクリアしてからGitHubの方に再度プッシュ。
Render.comrで再度デビルド〜デプロイ作業。
無事、崩れていないトップページが表示されたのでした。

壁打ちAIティーチャーの解説と回答

壁打ちAIティーチャーに今回のエラーについて、素朴(?)な疑問をぶつけてみました。

以前、Laravel10で制作したWebサイトをXserverの共用サーバーにGitHubを経由してデプロイしている。
その際に、Laravel側で強制HTTPSを記述した記憶がない‥。あれ?
なぜ、Xserverの共用サーバーにデプロイ時にはこのようなことが起こらず、Render.com デプロイ時には発生したのか???

それはズバリ 「環境差異」 。

  • 前回(Xserver)では Mixed Content が発生せず、今回(Render.com)では発生した理由は 「サーバー側の HTTPS の扱いが根本的に違うから」 です
    とのこと。

Render の公式ドキュメントによると、

  • HTTPS はロードバランサー側で終端され、アプリケーションには HTTP としてリクエストが届くという構造になっています。※

とのこと。※は以下の部分を解説してもらいました‥。
「Connect to your web service」

そして

  • Xserverの時はサーバー側が至れり尽くせりでLaravelにお膳立て(HTTPSの通知)をしてくれていたが、RenderのようなモダンなPaaSでは、その伝言ゲームを自分で繋いであげる(forceScheme('https'))必要がある
    とまとめてくれました。

デバッグの細道のひとりごと(反省と感想)

"デプロイすること"にいっぱいいっぱいで、インフラに対する認識がなく‥(汗)。
知らないって恐ろしい‥。

そして。
今回、Qiita投稿のため改めてエラーとデバッグを振り返るなかで出てきたサーバーごとの「環境差異」。
デバッグしている真っ只中では、気づかない視点でした‥。

技術記事をまとめると理解が深まる、というのは‥もしかしてこういうこと???
記事をまとめなかったら、”「Mixed Content(混合コンテンツ)」なのか‥” で終わっていたかもしれません。

振り返って検証できるのが記事投稿の良さ、なのかもしれない‥です。
書いてみるものですね。
書くからこそ、見えてくるのものもあるのですな‥。

学習、反省、また学習。

読んでいただいて、お疲れ様でした。
ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?