我已经在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
。如果我点击它,这个链接就会起作用。
然而,也有这样的链接:.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.js
和application.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。