私の手に負えない状況のため、私のプロダクションキャンプサイトはに表示されmysite.example.com/mysite
ます。これは一般的なApache/Passenger構成の問題であると確信しています。サーバーが制御不能であるため、今のところ修正する方法には興味がありません。言うまでもなく、「/」のコントローラーはそこを指しており、すぐに変更することはできません。
さて、長い間、これは問題ではありませんでしたR(MyIndexController)
。正しい場所を指しているからです。Rack::Static
ただし、 $ SITE_ROOT / publicにアクセスできるようにするための呼び出しを使用して、サイトのCSSを提供しています。これは、スタイルシートがにあることを意味しますmysite.example.com/mysite/css/style.css
。ここで問題が発生します。CampingURL()
メソッドは、私のレイアウトで呼び出されると、http://mysite.example.com
ではなく、を与えhttp://mysite.example.com/mysite
ます。そのため、/ cssサブディレクトリを指すようにすることはできません。これは、途中に「ホップ」がないためです。ラックアップをローカルで実行すると、すべて問題ありませんが(このファイルはにあるためlocalhost:8080/css/style.css
)、運用サーバーでは修正方法がわかりません。
私の質問:代わりに呼び出す必要のある別のメソッド(おそらくRackから直接)はありますか?レイアウトのレンダリングごとに、ハードコーディングしたり、ローカルで実行しているか(デバッグ用)、本番環境で実行しているかを判断するためのハックを避けたいと思っています。
ETA:わかりました、これは見知らぬ人になります。明らかに、私は上記の実際の詳細のいくつかを抽象化しましたが、その一部は「オーバースクラブ」したと思います。「トップレベル」のURLは、 (アカウント)や(JQueryの「素敵な」UI)では/mysite/rest
なく、実際には(RESTfulインターフェイスの開発者中心のHTMLプレゼンテーション)に似ています。これらは、config.ru、経由などで設定されます。/mysite/management
/mysite/ui
run Rack::URLMap.new(Hash['/rest' => RestModule, '/ui' => PrettyInterfaceModule, '/management' => UserManagerModule]
したがって、以下のコメントへの回答として、RestModuleのビューからのR(Index)は、実際にはを返します/mysite/rest/
。例として、レイアウトにのような「ホーム」リンクがあり、のようa :href=>R(Index)
なコードを生成します<a href="/mysite/rest/">
。サーバーは、「サイトルート」で直接./publicからのファイルを提供するように構成されているため、前述のように、./public/css/style.css
実際にはで表示http://mysite.example.com/mysite/css/style.css
されます。自動的に生成するのに問題があるのはそのリンクです。Rack::URLMapが原因で、このリソースを見つけるためにネイティブのRackメソッド(Campingの抽象化ではない)に依存する必要があると思いました。