1

nginxを使用して 2 つの Rails サイトを提供しています。Rails1 はアセット パイプラインを使用しませんが、Rails2 は使用します。Rails2 も接頭辞を使用して Rails1 と区別しています。例えば:

http://myhost -> Rails1
http://myhost/abc -> Rails2

両方のサイトが実行されていますが、Rails2 サイトのアセットへの参照が見つかりません

私の疑似nginx.confは次のようになります。

http {
    上流のレール1 {
        サーバー 127.0.0.1:3000;
    }
    上流のレール2 {
        サーバー 127.0.0.1:3030;
    }
    サーバー {
        場所 ~ ^/assets/ {
            最大有効期限;
            add_header キャッシュ コントロール public;
            access_log off;
        }
        場所/abc {
            proxy_pass http://rails2;
        }
        位置 / {
            proxy_pass http://rails1;
        }
    }
}

また、Rails 2 アプリの routes.rb :

Rails2App::Application.routes.draw do

  scope '/abc' do
    resources :projects
    root :to => 'home#index'
  end

end

Rails2http://myhost/abc/アプリを参照すると、css のないページが表示され、次のエラーが表示されます。

GET http://myhost/assets/application-asdasd.css 404 (見つかりません)

config.assets.prefix = '/abc'production.rb ファイルで使用しようとしましたが、うまくいきませんでした。また、 ngnix.conf ファイルでさまざまなバリエーションを試しましたが、どちらも役に立ちませんでした。

私が間違っていること、または行方不明になっていることを知っている人はいますか?


アップデート

理由はよくわかりませんが、アップストリームの代わりに @location を使用して (誤って) 動作させることができました。しかし、assets フォルダーを Rails2 アプリから Rails1 アプリに移動する必要がありました。正確には理想的ではありません。

サーバーセクションへの変更:

場所 ~ ^/(資産)/ {
    最大有効期限;
    add_header キャッシュ コントロール public;
    access_log off;
}

場所 ~ ^/(abc)/ {
    ルート /rails2/public;
    try_files $uri/index.html $uri.html $uri @rails2;
    error_page 404 /404.html;
    error_page 422 /422.html;
    error_page 500 502 503 504 /500.html;
    error_page 403 /403.html;
}

位置 / {
    ルート /rails1/public;
    try_files $uri/index.html $uri.html $uri @rails1;
    error_page 404 /404.html;
    error_page 422 /422.html;
    error_page 500 502 503 504 /500.html;
    error_page 403 /403.html;
}

場所 @rails1 {
    proxy_pass http://127.0.0.1:3000;
}

場所 @rails2 {
    proxy_pass http://127.0.0.1:3030;
}
4

2 に答える 2

0

実稼働環境でNginxでRails 4を実行すると、同様の問題が発生しました。私が見つけた解決策はroot、アセットの場所のパスを指定することでしたnginx.conf:

location ^~ /assets/ {
    root /home/rails/myapp/public;
    gzip_static on;
    expires max;
    add_header Cache-Control public;
}

お役に立てれば

于 2014-03-16T21:32:19.013 に答える