2

私の手に負えない状況のため、私のプロダクションキャンプサイトはに表示され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/uirun 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の抽象化ではない)に依存する必要があると思いました。

4

2 に答える 2

1

したがって、この場合、URL()実際にはhttp://mysite.example.com/mysite/rest/?このようなものはどうですか?

URL().merge('../css/style.css')
于 2010-09-22T07:10:22.287 に答える
0

これは古い質問なので、すでに回避策を見つけたと思いますが、新しい乗客+ apache(またはngnix)は、私が再現できる限り、キャンプに対して正しく動作します。アプリはドキュメントルートにあり、すべてのインクルードは/ publicフォルダーにあるため、サブフォルダー/ mysiteを使用しているかどうかに関係なく、/ public / cssは正しくルーティングされる必要があります。これは、乗客が(再び)違いをもたらさないためです。複製できるので。したがって、これは乗客3+Apacheまたはngnixで簡単に解決できるはずです。

于 2012-04-13T15:31:42.583 に答える