【发布时间】:2018-12-17 20:07:02
【问题描述】:
我在 Nginx 和Passenger 的同一台服务器上有两个不同的Rails 5 应用程序。一个在 /subpath 下提供,带有 nginx location {} 块,在 routes.rb 中带有 scope 'subpath' do 并且 config.assets.prefix 和 config.relative_url_root 都设置为 /subpath。
我试图在不同的子路径上为其他应用程序提供服务,但它有一些 Javascript 和插件,希望它在域路由上,所以结果比它的价值更麻烦,所以它在域路由上.
大多数情况下一切正常,但是当应用程序相互链接时,另一个应用程序会出现一些 CSS 和 JS 泄漏。如果我刷新页面,它会自行修复。
从www.domain.com/subpath/foo 中的应用程序链接到www.domain.com/bar 后使用检查器,我可以看到www.domain.com/bar 正在使用来自www.domain.com/subpath/application.css 的一些代码(已编译的生产版本)。它在两个方向上都是一样的。
我认为这是某种缓存问题,所以我尝试在两个应用程序中将 config.cache_classes 和 config.action_controller.perform_caching 更改为 false 无效。 (如果重要的话,域根目录上的一个应用程序正在提供静态文件)
知道为什么会这样吗?
【问题讨论】:
-
这并不能说明很多。您是否尝试过打开资产管道调试,并查看输出是什么?在这里它告诉你如何关闭它,但你只需将其设置为 true 以启用它guides.rubyonrails.org/… 然后检查
logs/development.log以查看它吐出的内容。 -
当我在生产中将
config.assets.debug转为true时,它会提示找不到任何资产。它在开发中运行良好。 -
运行
rails assets:clean有助于在两个应用程序之间链接一段时间,但现在它又做了一次。我也试过rails assets:clobber没有效果。 Nginx 还反向代理到另一个子路径中的静态 html 页面,当我从任何一个应用程序链接到静态页面时,它也会从那里编译的 application.css 继承样式,这通过刷新来修复。似乎浏览器正在使用来自其他应用程序的缓存 css,只要它们在同一个域中。 Nginx 本身没有缓存。 -
我也尝试在应用程序和html页面中设置
<meta http-equiv="expires" content="0" />,但没有任何效果。它在多个浏览器中执行相同的操作。
标签: nginx ruby-on-rails-5 passenger