【问题标题】:Linking Rails 5 apps in subpaths using assets from other app使用来自其他应用程序的资产在子路径中链接 Rails 5 应用程序
【发布时间】: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_classesconfig.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


【解决方案1】:

我能够通过禁用 turbolink 解决问题。不确定是否有办法防止 turbolinks 造成这种情况,但这对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 2012-08-05
    • 2019-01-15
    • 2013-05-17
    相关资源
    最近更新 更多