2

PassengerからUnicornに移行しています。Passengerでは、Rails3.0アプリをRailsBaseURIオプションで実行して、たとえばすべてのURLの前に「/blah」を付けていました。

Unicornで同じアプリを実行する場合、「-path / blah」をunicorn_railsに渡しますが、サーバーはhttp:// server:3000 / blahではなくhttp:// server:3000 / etc/etcとして機能します。 / etc/ etc-いくつかのアセットが/blah/を介して要求されているのがわかります(JSファイルなど)が、さまざまなリンクの前に「/blah/」がありません。

つまり、要約すると、Unicornでアプリを/ blahの下にマウントして、すべてのリクエストがパスの前に「/ blah」を付けて機能し、すべてのリンクとアセットが「/ blah /」を前に付けて作成されるようにするにはどうすればよいですか?

ありがとう

4

3 に答える 3

4

これが私が発見したものです:

RailsアプリでアセットとリンクのURLを提供するには、起動する前に環境変数を設定する必要があります。

ENV['RAILS_RELATIVE_URL_ROOT'] = '/prefix'

次に、@ d11wtqが言ったように、Rack互換サーバー(この場合はUnicorn)が実際にプレフィックスの下でアプリを提供できるようにするには、config.ruファイルで、通常の実行行の代わりに、続く:

run Rack::URLMap.new(
  ENV['RAILS_RELATIVE_URL_ROOT'] => Rails.application
)
于 2012-11-24T15:14:17.853 に答える
3

私はあなたのconfig.ruにこのようなものを置くことはそれをするべきだと信じています:

require ::File.expand_path('../config/environment',  __FILE__)

run Rack::URLMap.new(
  "/blah" => Rails.application
)

テストされていません

于 2012-04-30T15:40:26.100 に答える
1

簡単で信頼性の高い解決策は、フロントエンド設定でプレフィックスを設定することです。

たとえば、passenger + nginxの場合、次のようなものを使用できます。

server {
    listen 80;
    server_name www.phusion.nl;
    root /websites/phusion;
    passenger_enabled on;
    passenger_base_uri /prefix;
}

ソースコードに変更はありません。1行のセットアップです。


しかし、あなたはあなたが使用していると言いました、あなたはunicornどのフロントエンドを使用していますか?

nginxの使用は、次のような方法で可能になるはずです。

location /prefix {
    rewrite           ^/prefix/(.*)  /$1      break;
    proxy_pass        http://localhost:8000;
}
于 2012-11-23T16:33:53.697 に答える