【涙と怒りの解決】Redmineのサブディレクトリ設定が効かない地獄!「お前がやるんじゃないんかい!」と叫んだ日

😫 リンクに「/redmine/」がつかない地獄

Redmine 6.0をWindowsサーバー(Puma + Apacheリバースプロキシ)で運用開始!
当初は
https://localhost/
で運用してたけど、
今作成しているDjangoアプリもApatcheで運用して、アクセスはサブディレクトリで使おうと考えいたので、Redmineもサブディレクトリ化したほうが良いと考えてAIに相談。いわれたとおりに設定。。。。

しかし、アクセスしてみると…

/redmine/」でアクセスしてるのに、リンクが全部「/projects」とか「/login」になってるじゃん!**画像は全て崩壊!**

これは、Railsアプリ(Redmine)が「自分は /redmine の下にいるんだ」と認識できていないために起こる、サブディレクトリ運用最大の罠です。

🤯 奮闘開始!裏切られたRedmineの設定たち

誰もが知っているはずの「Redmineの常識」に基づき、様々な設定を試しました。

1. Redmine側の設定(常識)

「リンクを生成するのはRedmineの責任だ!」と信じ、何度も確認しました。

  • **config/environments/production.rb** にconfig.relative_url_root = "/redmine"を追加。→ 変化なし。
  • **Winsw XML**にSCRIPT_NAME="/redmine"などの環境変数を強制注入。→ 変化なし。
  • バグ対策としてカスタムミドルウェアやコアファイルに直書き。→ **起動失敗!**

「設定は書いたぞ!なぜ動かん!?」と、夜中に何度もサーバーに向かって叫びました。

2. Apache側の設定(言われるがまま)

AIアシスタントに言われるがまま、**「Redmineが認識できるように外部から信号を送れ!」**ということで、Apacheの設定をいじり倒しました。

  • RequestHeader set X-Script-Name "/redmine"をLocationタグで強制注入。→ 変化なし。

もはや何が正しいのかわからない。「Redmineが悪いんだろ!なんでApacheを直すんだよ!」という不満が爆発寸前でした。

🏆 勝利の瞬間!「お前が付けるんかい!」

全ての常識、全てのセオリーが通じない中、ついに**「矛盾を力で解決する」**というアプローチに辿り着きました。

従来のApache ProxyPass の設定はこうです。

# Redmineへのリクエストから「/redmine/」を剥がして、Pumaに「/」として渡す
ProxyPass /redmine/ http://localhost:3000/

Redmineがサブディレクトリを認識できないなら、**Apacheがサブディレクトリ情報を剥がさなければいい**のではないか?

そして試したのが、この設定です。

# Redmineへのリクエストに、なぜか「/redmine/」をつけてPumaに渡す
ProxyPass /redmine/ http://localhost:3000/redmine/
ProxyPassReverse /redmine/ http://localhost:3000/redmine/

結果:リンクが直った!

Redmineは、内部でパスを生成する際に /redmine を付けるよう設定されているにも関わらず、なぜかこのApacheの設定(Pumaへの転送先にも /redmine/ を含める)が**トドメ**となり、ついに正しいリンクを生成し始めました。

まさに、**「Redmineが付けるべきリンクを、Apacheが付けて渡すことで解決する」**という、矛盾と勝利が同居した瞬間でした。

✨ 最後に残った画像崩壊も撃破!

リンクが直っても、画像はまだ崩れたまま…。これは静的ファイル(Assets)のキャッシュの問題です。

以下のコマンド一発で、キャッシュをクリーンアップし、完璧な表示に成功しました!

bundle exec rake assets:clobber RAILS_ENV="production"

長かった闘いは、これにて終幕です!サーバーの神様は、最後に自力で解決した者に微笑んでくれました。もし同じ問題に遭遇したら、この最後の矛盾した設定を思い出してください!

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です