Rails 如何禁用 Rails 的 Assets Pipleline?

flybee · October 10, 2018 · Last by flybee replied at October 15, 2018 · 1194 hits

rails 5.2.1

配置了:config.assets.enabled = false

但是 stylesheet_link_tag 的 helper 方法还是提示找不到静态资源 代码如下:

<%= stylesheet_link_tag "site/reset" %>

提示错误如下: ActionView::Template::Error (The asset "site/reset.css" is not present in the asset pipeline.)

public 目录如下:

你都要禁用 Assets Pipeline 了,为何还有 stylesheet_link_tag ?

Reply to huacnlee

禁用 Assets Pipeline 之后,stylesheet_link_tag 写成相对路径不生效,写成绝对路径就行了,但是不知道在哪里设置 stylesheet_link_tag 的默认工作 dir

能说下为什么要禁止使用 stylesheet_link_tag 吗? 把背景说清楚,或许有更好的方法来解决

Reply to flybee

stylesheet_link_tag 的作用就是找 asset pipeline 处理过后的资源,如果不走 pipeline 直接用 <style> 标签即可。

Reply to flybee

如果禁用 AP 并且不用 Webpacker 或者其他关联前端工具链的方案的话,你就只能把编译好前端资源放到 public 目录下了,这个就是 Rails 3.1 前的做法,目前 Redmine 这些上古项目也还是这么用(貌似)

Reply to heroyct

我们不用 AP 来编辑静态资源,我们前端用自己的构建资源的工具以及压缩方法。一般上线前,前端会把他们编译压缩后的静态资源提交,我们直接引用相应的资源即可,没有用到 AP 的功能,所以也禁用了 AP。但是感觉 stylesheet_link_tag 的写法很方便,所以想使用这个 helper 方法。尤其是 stylesheet_link_tag 可以在生成的资源文件后面加上时间戳来防止资源文件的缓存问题。

Reply to Rei

是的,我现在直接用< style >标签的写法了,资源的时间戳是我自己打上去的。

Reply to jasl

之前的项目一直是 rails3.X 的 资源的安放路径是 public 现在使用 5.2 的版本,想遵循一些以前的做法,看来我的这种想法就是错的

Reply to flybee

那个是 hash 而不是时间戳,前端可以把文件名和打包后的静态文件路径写到一个 json 文件里,然后在 Rails 加个 helper 方法读取 json 内的路径,就可以做到类似 stylesheet_link_tag 的效果。

https://github.com/rails/webpacker 已经做了这件事情,并且 Rails 6.0 会成为默认,如果你们前端团队本来就是用 Webpack 而且不介意源码放在同一个项目里,那么可以试试 Webpacker。

Reply to Rei

👍 好的

You need to Sign in before reply, if you don't have an account, please Sign up first.