1

我在 VPS 上设置了 nginx 和Passenger,从两条不同的路径为两个Rails 应用程序提供服务。这是我的目标——从不同的子 URI 为每个 Rails 应用程序提供服务。

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目录中创建了一个符号链接,app1并在这两种情况下app2分别链接到./current/public

当我访问该站点时,所有页面都正确显示,但静态资产似乎都不起作用!如果我查看页面源代码,我会看到指向如下页面的链接:/app1/home/index. 如果我单击该链接,则该链接有效。

但是,也有这样的链接:/app1/assets/application-1b13569e9620782f423d4cd3ce931750.css用于 .css 和 .js 资产。但是当我单击链接时找不到它们!

我的 nginx + 乘客配置有问题,它没有正确路由这些吗?检查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.jsand 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 回答