Rails [assets pipeline 相关] semantic-ui 的图标文字在产品环境下无法正常显示

shinefine · 2014年08月20日 · 最后由 foresea 回复于 2016年04月29日 · 5389 次阅读

一个 rails 项目,在 Gemfile 中声明使用 Gem 包 gem 'semantic-ui-sass'

semantic-ui 自带了一系列的图标文字,这些,可以通过在 html 文件中以类似于

--- (页面呈现一个文字,看起来像个图标)

的方式使用。

包含这些图标文字的字体文件处于 semantic-ui-sass gem 包的 安装路径(xxxxx/ruby/gems/2.1.0/gems/semantic-ui-sass-0.16.1.0/ )的 app/assets/fonts/semantic-ui/ 路径下

具体包含图标文字的字体文件 : basic.icons.eot basic.icons.woff basic.icons.svg icons.svg icons.woff ... ...

我在项目视图文件 index.html.erb 的引用了 semantic-ui 的相关 css 和 javascript 文件,在视图文件中,通过 想在页面呈现一个图标文字。

在 develop 环境下,浏览器中的 index.html 文件呈现的是正常的,(浏览器请求字体文件 是成功的)

http://localhost:3000/assets/semantic-ui/icons.svg http://localhost:3000/assets/semantic-ui/icons.woff

而在 production 环境下,这些图标文字全部不能显示出来,原因是浏览器请求的图标字体文件不存在

http://websitexxxx.com/assets/semantic-ui/basic.icons.woff http://websitexxxx.com/assets/semantic-ui/icons.woff 报错 Failed to load resource: the server responded with a status of 404 (Not Found)

我查看了项目的 public 文件夹,在 public/assets/semantic-ui/中不存在 basic.icons.woff,icons.woff 这些文件,相应的,是类似于

basic.icons-f7635aae393b695a44c688db5a0427c3.woff icons-18bbbc0f09fd467a4d62cdd70540100c.woff

这种格式的文件。 (这些文件都是通过 rake assets:precompile 产生出来的)

请问这个问题应该怎么解决呢?

production 配置 config.assets.precompile += %w( *.woff *.svg)

#1 楼 @dddd1919

试了下,config.assets.precompile 配置项和这个问题无关,无论有无这行代码,assets pipeline 都会处理 semantic-ui 的 woff 文件和.svg 文件,将其输出到 public 文件夹下的相关位置,并且处理后的文件都带有 指纹信息(文件名 icons-f7635aae393b695a44c688db5a0427c3.woff 中间那一串就是指纹信息)

我也试了调整这两个配置项的值 config.assets.compile = true config.assets.digest = true

还是没能解决问题。最后我只能手动将这些文件命中的 指纹值去掉,问题算是解决了。

但是,这个问题不算是从根本上解决,因为这个问题的本质在于,能不能配置 assets pipeline 使得其在预处理某些类型的文件时,不给文件打上指纹标记?

又或者说,若 pipeline 预处理文件后,始终生成的文件带有指纹信息,那么,问题就在于,类似于 semantic-ui 这些 gem 如何去适应这种处理后带有指纹信息的文件?

#2 楼 @shinefine 字体我都是直接存到 public 里

4 楼 已删除

@shinefine 最近遇到同样问题,lz 可以用 https://github.com/alexspeller/non-stupid-digest-assets 将 non-digest 的 asset 做个 whitelist 就会保留原本的文件了,同时也会 precompile 成加 fingerprint 的文件,不过可以解决 css 里的路径问题。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号