2011-09-13 8 views
1

jRuby Rails 3.0アプリケーションがApache 2プロキシの背後でAJPマウントを介して動作するようになったのだろうかと思います。私は最後のステートメントのコメントを外さずに、以下の設定をしたいと思います。mod_ajpの背後にあるjRuby上でRails 3.0を実行する方法Apache 2プロキシ

<VirtualHost *:80> 

    ServerName app.example.com 

    ProxyRequests Off 
    ProxyPass  / ajp://127.0.0.1:8009/app/ 
    ProxyPassReverse/ ajp://127.0.0.1:8009/app/ 

# ProxyPassReverse/ http://app.example.com/app/ 

</VirtualHost> 

まず、レールのアプリ(restful_authentication用すなわちログインおよびログアウトルート)で指定されたルートの相対的なリダイレクトを取得する方法はないように思えます。 Railsアプリケーションでは、AJPマウントでリバースプロキシ文をフックすることさえありませんが、完全なURI(コメントに表示されています)については静的HTTPリバースプロキシルールで捕捉する必要があります。第二に、リバースプロキシルールに従ってレベルでHTMLヘルパーの資産出力を提案する適切な方法はないようです。

私はこれを行うことができますが、それは非常に静的なリバースプロキシルールのように、むしろ利用するように感じている:

config.asset_path = proc { |path| path.gsub(/\/app\//, '/') } 

apparantlyのみが展開さえずりWARのすでに設定範囲に追加されますRAILS_RELATIVE_URL_ROOTを追加し、経路を減らすのに役立たない。

プロキシを実行するためのmod_proxy_ajpソリューションと、一致しないルートがあるreverseproxyが必要です。

これを解決する方法についてのアイデアや、問題をカバーするリソースの方向性を指摘してください。私はあなたがAJPを使用してから切り替えて、それは異なるパス間のプロキシでコーナーケースのカップルを修正するHTTPプロキシを使用する必要があるHTTP書き換え魔法が必要な場合、それはHTTPヘッダを書き換えていると思い

+0

まっすぐな良い古いHTTPプロキシの代わりにajpを使用すると、何を得ることができますか?こんにちはbtwマーティン:) – sunkencity

+0

私はそれが多くを助けると思うが、まだHTMLヘルパーの問題があります。 ...そして、率直に言って、私はホスト部分を持たないローカルリダイレクトを見たいのですが、それはホストを追加するリバースプロキシーでしょうか? (こんにちはjoel :) – Martin

+0

http://serverfault.com/questions/106254/how-can-i-set-use-mod-proxy-ajp-with-apache-and-tomcat – sunkencity

答えて

1

ソリューション1

プロのajpがそれをしているかどうかはわかりません。私はROOT.warとしてレールアプリを提供するか、Tomcatサーバー上の仮想ホストや何かにサービスを提供して、エラーの原因を最小限に抑えて、ルートとしてのフォルダをプロキシしようとします。常に動作しない、または調整が必要なものがあります。ポートとローカルドメイン名は安価です。

本番環境設定ファイルにこれを追加:あなたがしたい場合は、中に入ってくるのパスをリセットすることができ

config.action_controller.relative_url_root = '/app' 

は、より多くの@What is the replacement for ActionController::Base.relative_url_root?


解決策2を参照してください簡単なラックミドルウェアを備えたレールアプリ。この方法では、ルートアプリケーションはルートパスで提供しないことについて何も知らないでしょう。また、運用モードで静的資産を提供するために、config.serve_static_assets = trueを追加することもできます。

このフリーハンドを入力することについて申し訳ありませんが、動作するはずです。

# proxy_path_reset_filter.rb 
class ProxyPathResetFilter 

    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    # some servers use REQUEST_URI and some use PATH_INFO for routing use both 
    if (env['REQUEST_URI'] || env['PATH_INFO']) =~ /^\/app\// 
     env.update({ 
      'REQUEST_URI' => env['REQUEST_URI'].gsub(/^\/app\//, '/')), 
      'PATH_INFO' => env['PATH_INFO'].gsub(/^\/app\//, '/')) }) 
    end 
    @app.call(env) 
    end 

end 
+0

config.action_controller.relative_url_rootは、apache仮想ホストディレクティブRAILS_RELATIVE_URL_ROOTで設定できる変数と同じではありませんか?その場合、既に深すぎるルートに別のスコープしか追加されないためです。ヘルパーは/ app/app/stylesheets | javascript | images/...などを出力します。 – Martin

+1

はい、プロキシのRAILS_RELATIVE_URL_ROOTを設定するとあまり効果がありません。問題は、あなたのレールアプリがそれがスコープであるかどうかを知りたくないのですか? – sunkencity

+0

私は、アプリケーションがWARファイルによって暗黙的にスコープされていることを知り、別のスコープを追加しません。 – Martin

関連する問題