从一个IP服务多个Rails应用程序:找不到静态资产(nginx+Passenger)



我已经在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目录中创建了一个符号链接,称为app1app2,在这两种情况下分别链接到./current/public

当我访问该网站时,所有页面都会正确显示,但没有一个静态资产可以工作!如果我查看页面源,我会看到指向以下页面的链接:/app1/home/index。如果我点击它,这个链接就会起作用。

然而,也有这样的链接:.css和.js资产的/app1/assets/application-1b13569e9620782f423d4cd3ce931750.css但当我点击链接时却找不到它们

我的nginx+Passenger配置有问题吗?它没有正确地路由这些?检查public/assets文件夹可以发现这些文件实际上是正确预编译的,并且确实出现在那里。

在您的情况下,导致错误的资产应该包含在application.js清单文件中,如下所示:

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

并将其从您的产品中删除。rb:

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

通常在部署之后,在服务器上的public/assets(在生产环境中)中,您应该只看到application.jsapplication.css的不同版本。

考虑将对外部javascript的调用(最好在这里解释)放在视图模板中application.js之前,类似于以下内容:

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

编辑:实际问题已经由@aardarkk解决,只需像这样更改production.rb中的设置:

config.serve_static_assets = true

CCD_ 16的配置包括设置的子URI。

相关内容

  • 没有找到相关文章

最新更新