1

2 つの別々のパスから 2 つの Rails アプリを提供するために、VPS に nginx と Passenger をセットアップしました。これが私の目標です。それぞれの Rails アプリを個別のサブ URI から提供することです。

123.123.123.123/app1
123.123.123.123/app2

Passenger + nginx のドキュメントに従って、次のように設定しましたnginx.conf

server {
        listen 80;
        server_name 123.123.123.123;

        location /app1 {
            alias /u/apps/app1_project_name;
            passenger_enabled on;
            passenger_base_uri /app1;
        }

        location /app2 {
            alias /u/apps/app2_project_name;
            passenger_enabled on;
            passenger_base_uri /app2;
        }
    }

/u/apps/app1_project_nameどちらの場合も、と/u/apps/app2_project_name呼ばれるディレクトリapp1app2それぞれにリンクするディレクトリにシンボリックリンクを作成しました./current/public

サイトにアクセスすると、すべてのページが正しく表示されますが、静的アセットがまったく機能していないようです! ページのソースを表示すると、次のようなページへのリンクが表示されます/app1/home/index。そのリンクをクリックすると機能します。

ただし、次のようなリンクもあります: /app1/assets/application-1b13569e9620782f423d4cd3ce931750.css.css および .js アセット用。しかし、リンクをクリックしても見つかりません!

これらを適切にルーティングしていないという私のnginx + Passenger構成に何か問題がありますか? フォルダーを調べるpublic/assetsと、ファイルが実際に正しくプリコンパイルされており、そこに表示されていることがわかります。

4

1 に答える 1

1

application.jsあなたの場合、エラーの原因となっているアセットは、次のようにマニフェスト ファイルに含める必要があります。

//= require hsv_to_rgb
//= require overlays
//= require initialize

これを production.rb から削除します。

config.assets.precompile += %w( hsv_to_rgb.js initialize.js overlays.js )

通常、 deploy の後public/assets、サーバー上 (本番環境) には、application.jsとの異なるバージョンのみが表示されますapplication.css

次のように、ビュー テンプレートの直前に外部 JavaScript への呼び出しを配置することを検討してください (ここで最もよく説明されています)。application.js

<%= javascript_include_tag 'https://maps.googleapis.com/maps/api/js?libraries=geometry&sensor=false' %>
<%= javascript_include_tag "application" %>

編集: 実際の問題は @aardvarkk によって解決され、次のproduction.rbように設定を変更するだけです:

config.serve_static_assets = true

の構成にnginxは、サブ URI のセットアップが含まれます。

于 2013-02-08T19:11:46.957 に答える