【问题标题】:Rails asset pipeline: fonts not foundRails 资产管道:找不到字体
【发布时间】:2016-05-15 05:31:19
【问题描述】:

我有一个奇怪的错误,有些字体可以找到但有些没有。基本上我有两种字体font1(来自 IconMoon 的自定义字体)和Brandon(来自 fonts.com)。我的目录结构是

- app
  - assets
    - fonts
      - font1.eot
      - ...
      - 172fdde2-f56b-433a-a6e2-ebeab9dfb588.eot
      - ...

我正在使用 SCSS 加载我的字体:

@font-face {
  font-family: 'font1';
  src:font-url('font1.eot?-kpzpl9');
  src:font-url('font1.eot?#iefix-kpzpl9') format('embedded-opentype'),
  font-url('font1.woff?-kpzpl9') format('woff'),
  font-url('font1.ttf?-kpzpl9') format('truetype'),
  font-url('font1.svg?-kpzpl9#font1') format('svg');
  font-weight: normal;
  font-style: normal;
}

@font-face{
  font-family:'Brandon Grot W01 Medium';
  src:font-url('172fdde2-f56b-433a-a6e2-ebeab9dfb588.eot?#iefix');
  src:font-url('172fdde2-f56b-433a-a6e2-ebeab9dfb588.eot?#iefix') format('eot'),
  font-path('50ca6f6f-b64d-4af0-9b30-526cf363d87e.woff2') format('woff2'),
  font-url('050c2cbf-b818-4b8e-b6d2-71b70478bd9d.woff') format('woff'),
  font-url('7da41ce3-b3fd-4fca-a85f-4f3099884c15.ttf') format('truetype'),
  font-url('37c88f3d-9532-4547-9e11-7cca7f66048c.svg#37c88f3d-9532-4547-9e11-7cca7f66048c') format('svg');
}

当我尝试加载 font1 字体时,一切正常。但是当我尝试加载 Brandon 字体时,我得到 404 错误。这是生成的 CSS:

@font-face {
  font-family: 'font1';
  src: url(/assets/font1.eot?-kpzpl9);
  src: url(/assets/font1.eot?#iefix-kpzpl9) format("embedded-opentype"), url(/assets/font1.woff?-kpzpl9) format("woff"), url(/assets/font1.ttf?-kpzpl9) format("truetype"), url(/assets/font1.svg?-kpzpl9#font1) format("svg");
  font-weight: normal;
  font-style: normal;
}

@font-face {
  font-family: 'Brandon Grot W01 Medium';
  src: url(/assets/172fdde2-f56b-433a-a6e2-ebeab9dfb588.eot?#iefix);
  src: url(/assets/172fdde2-f56b-433a-a6e2-ebeab9dfb588.eot?#iefix) format("eot"), "/assets/50ca6f6f-b64d-4af0-9b30-526cf363d87e.woff2" format("woff2"), url(/assets/050c2cbf-b818-4b8e-b6d2-71b70478bd9d.woff) format("woff"), url(/assets/7da41ce3-b3fd-4fca-a85f-4f3099884c15.ttf) format("truetype"), url(/assets/37c88f3d-9532-4547-9e11-7cca7f66048c.svg#37c88f3d-9532-4547-9e11-7cca7f66048c) format("svg");
}

/assets/font1.eot 的调用产生200,对/assets/172fdde2-f56b-433a-a6e2-ebeab9dfb588.eot 的调用产生404

我不确定为什么会发生这种情况,因为它们在同一个目录中。日志如下所示

Started GET "/assets/font1.eot" for 127.0.0.1 at 2016-02-05 10:38:22 +0100
Served asset /font1.eot - 304 Not Modified (0ms)

Started GET "/assets/172fdde2-f56b-433a-a6e2-ebeab9dfb588.eot" for 127.0.0.1 at 2016-02-05 10:39:25 +0100
Served asset /172fdde2-f56b-433a-a6e2-ebeab9dfb588.eot - 404 Not Found (6ms)

我在 Rails 3.2.9 上

关于如何调试此问题的任何想法?

【问题讨论】:

  • 你本地预编译了吗?
  • 你确定你有172fdde2-f56b-433a-a6e2-ebeab9dfb588名字的字体家族?
  • 不,我没有在本地预编译
  • @Mr.Alien 这是从 fonts.com 复制和粘贴的。文件名必须与字体系列名称匹配吗?
  • @23tux 没有这样的要求...如果文件存在并且文件名正确,它应该可以工作。

标签: css ruby-on-rails fonts sass


【解决方案1】:

问题是由名称中的连字符引起的。

如果您将文件重命名为使用下划线,例如 172fdde2_f56b_433a_a6e2_ebeab9dfb588.eot,然后在您的 css 文件中将连字符替换为下划线,则一切正常。

这是由于 sprocket 在解析资产时试图去除指纹造成的。最终它会删除部分或全部文件名,然后找不到匹配的文件。

【讨论】:

  • 谢谢,成功了!这是您必须知道的事情,否则您将永远搜索;)
猜你喜欢
  • 2013-04-01
  • 1970-01-01
  • 2015-02-11
  • 2012-07-07
  • 1970-01-01
  • 2012-03-19
  • 2013-09-16
  • 2014-07-21
  • 2018-07-12
相关资源
最近更新 更多