我已经在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
文件夹显示文件实际上是正确预编译的并且确实出现在那里。
答案 0 :(得分: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 )
正常情况下,部署后,在服务器上的public/assets
(生产环境中)中,您应该只能看到application.js
和application.css
的不同版本。
考虑在视图模板中application.js
之前调用外部JavaScript(最佳解释here),如下所示:
<%= 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。