Rails 3.2.6字体的路由错误

时间:2012-07-19 06:09:59

标签: ruby-on-rails exception fonts routing asset-pipeline

我使用基于Rails 3.2.6的应用程序使用web-app-theme gem。在生产中部署之后,我在/var/log/apache2/error.log中看到了以下错误。

[Wed Jul 18 23:00:14 2012] [error] [client 50.53.58.188] Premature end of script headers: fonts, referer: https://xxx.xxx.xx.xxx
[ pid=8920 thr=139857209571072 file=ext/apache2/Hooks.cpp:819 time=2012-07-18 23:00:14.743 ]: The backend application (process 9474) did not send a valid HTTP response; instead, it sent nothing at all. It is possible that it has crashed; please check whether there are crashing bugs in this application.
[ pid=9474 thr=9488700 file=utils.rb:176 time=2012-07-18 23:00:14.744 ]: *** Exception ActionController::RoutingError in application (No route matches [GET] "/assets/fonts/museosans_500-webfont.svg") (process 9474, thread #<Thread:0x00000001219278>):
    from /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.3/lib/action_dispatch/middleware/show_exceptions.rb:53:in `call'
    from /usr/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/rack/logger.rb:13:in `call'
    from /usr/lib/ruby/gems/1.9.1/gems/rack-1.3.6/lib/rack/methodoverride.rb:24:in `call'
    from /usr/lib/ruby/gems/1.9.1/gems/rack-1.3.6/lib/rack/runtime.rb:17:in `call'
    from /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/active_support/cache/strategy/local_cache.rb:72:in `call'
.....

我已将提及的文件museosans_500-webfont.svg放在app/assets/fonts/目录中。但为什么我仍然是这个错误。我也看到/assets/fonts/museosans_500-webfont.ttf等其他资产的类似错误。

非常感谢任何反馈。谢谢。
- Atarangp

3 个答案:

答案 0 :(得分:0)

尝试将fonts dir添加到environment.rb中的资源路径:

config.assets.enabled = true
config.assets.paths << "#{Rails.root}/app/assets/fonts"

答案 1 :(得分:0)

CSS / HTML中的网址似乎有误:

/assets/fonts/museosans_500-webfont.svg

您应该将其更改为:

/assets/museosans_500-webfont.svg

保留该文件位于app/assets/fonts目录。

答案 2 :(得分:0)

在集成Katex库时遇到了同样的问题。

问题是Rails的Asset Pipeline将资产编译到public/assets目录中,而不保留fontsimagesjavascript目录。

因此,当您查找/assets/fonts/museosans_500-webfont.svg时,它不存在,该字体已编译为/assets/museosans_500-webfont.svg

要解决此问题,您有两种选择:

  1. 更新CSS或JS中的路径:

    /assets/fonts/museosans_500-webfont.svg

    成为

    /assets/museosans_500-webfont.svg

  2. 将字体放在fonts子目录中

    如果您不想(或不能)更新CSS或JS(例如,它是一个缩小的第三方库),那么您可以使用以下方法来确保有{{1包含所有字体的目录。

    只需将您的字体放在以下路径中:

    public/assets/fonts

    现在,您的/assets/fonts/fonts/museosans_500-webfont.svg目录将包含public/assets目录,您的GET请求将会很满意。

  3. 有关详细信息,请参阅this answer