Rails 4.1 - ActionController::RoutingError (无法匹配路由 [GET] "/fonts/....ttf") - @font-face问题

11

我觉得我已经尝试了这里和一些博客中找到的所有解决方案,但还是有些问题,而且我不知道出了什么问题。

我的错误:

...
Started GET "/fonts/amaze.ttf" for 83.9.18.180 at 2014-11-26 09:10:21 +0000
...
app[web.1]: ActionController::RoutingError (No route matches [GET] "/fonts/amaze.ttf"):
...
当然,在本地主机上也无法工作。
我正在使用rails 4.1.1
我的字体位于:
assets/fonts/amaze.ttf

我甚至尝试重新定位它以检查是否有效:assets/amaze.ttf - 但并没有成功。

我的当前解决方案在 application.css.scss 文件中:

@font-face {
  font-family: 'Amaze';
  src: font-url('amaze.ttf');
}

.amaze {
  font-family: 'Amaze';
}

我在application.rb中尝试了一些配置,但没有效果:

config.assets.enabled = true  
config.assets.paths << "#{Rails.root}/app/assets/fonts"  
config.serve_static_assets = true
config.assets.js_compressor = :uglifier
config.assets.compile = true
config.assets.digest = true
config.assets.version = '1.0'
config.assets.paths << Rails.root.join('app', 'assets', 'fonts')
config.assets.precompile << /\.(?:svg|eot|woff|ttf)\z/

在应用程序或开发/生产文件中,我需要配置任何内容吗?


编辑

(有点)解决了一个问题

问题在于我有一个损坏的字体……

更多细节: 我从这里下载了字体http://fontzone.net/download/amaze-normal 它是损坏的(我的意思不是完全损坏,它在Linux上工作,但在字体面板中不起作用,不知道为什么,如果值得尝试,请尝试找出问题)

我尝试了来自另一个来源的另一种字体: http://www.fontcubes.com/Amaze.font

它成功了!耶!-


编辑

我使用更多字体(otf和ttf)遇到了类似的问题,所以我会说问题仍然存在;P


1
字体 URL 助手实际上被命名为 font_url - 请注意下划线而不是破折号。 - eugen
好的,我改了。还是一样的。谢谢你的尝试。我会继续挖掘。 - zombie_ghast
5个回答

20

使用资产管道或将字体移动到public目录。

你的问题是路径/fonts/amaze.ttf没有使用Rails资产管道。需要在前面加上/assets以便使用资产管道,如/assets/fonts/amaze.ttf/assets/amaze.ttf

这里有两个主要选项:

  1. 更新路径请求:

    使用/assets/amaze.ttf代替/fonts/amaze.ttf

    请注意,为了使路径/assets/fonts/amaze.ttf工作,您需要将amaze.ttf字体放在/app/assets/fonts/fonts//vendor/assets/fonts/fonts/中。双重fonts目录确保在编译后的资产中存在/public/assets中的fonts目录。有关更多信息,请参见此答案

  2. 字体目录移动到public目录:

    由于所请求的路径并未使用资产管道,因此只需将字体目录移到/public/目录中,Web服务器就会自动提供服务。因此,您的字体应位于/public/fonts/amaze.ttf等位置。

这样就可以解决问题了!


作为临时解决方案,将 fonts/ 文件夹放在 public 目录下对我目前来说很有效。稍后必须深入挖掘并将它们放回 assets/ 中,但是现在截止日期即将到来...我会暂时把它们留在那里。 - WesternGun
1
@FaithReaper 感谢您确认将它们放在公共目录中可行。 - Joshua Pinter
我只写了字体文件名(例如amaze.ttf),没有在名称旁边给出路径,这对我起作用了。我的字体放在assets/fonts/内。 - Muhammad Zubair

4
我也遇到过font-awesome的这个问题,但这是我对字体的一般研究。
我在app/assets下创建了一个名为fonts的新目录。然后将所有的字体复制到那里,并在application.rb文件中将其包含到资产中,像这样:
config.assets.paths << Rails.root.join("app", "assets", "fonts")

将您的font-awesome.css重命名为font-awesome.css.scss.erb,并像这样更改其中的@font-face声明
    @font-face { font-family: "FontAwesome"; src: url('<%= asset_path('fontawesome-webfont.eot')%>'); 
src: url('<%= asset_path('fontawesome-webfont.eot?#iefix')%>') format('eot'), 
     url('<%= asset_path('fontawesome-webfont.woff')%>') format('woff'), 
     url('<%= asset_path('fontawesome-webfont.ttf')%>') format('truetype'), 
     url('<%= asset_path('fontawesome-webfont.svg#FontAwesome')%>') format('svg');
     font-weight: normal; font-style: normal; }

希望这对您有所帮助 :) 更多参考可以查看Font-face

0

对我而言,这是一个文件权限错误,因为我是将文件从另一台计算机复制过来的。当我解决了权限问题后,它就正常工作了。


0
对我来说,解决这个问题很简单,只要在application.scss中的导入语句中将URL中的https//修改为https://即可。下次一定要仔细阅读代码。

0

谢谢大家。

我找到了一个解决方案,为什么不将fonts/*.ttf放入app/assets/images/fonts/*.ttf中用于开发环境呢?

同时保持config/environments/development.rb仍然是默认的config.serve_static_assets = false假值。

这对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接