【问题标题】:Rails 3.2.6 routing error for fontsRails 3.2.6 字体路由错误
【发布时间】:2012-07-19 06:09:58
【问题描述】:

我有一个使用 web-app-theme gem 的基于 Rails 3.2.6 的应用程序。在生产中部署后,我在/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 等其他资产,我也看到了类似的错误。

非常感谢任何反馈。谢谢。
-- 阿塔朗普

【问题讨论】:

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


    【解决方案1】:

    尝试将字体目录添加到 environment.rb 中的资产路径:

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

    【讨论】:

    • Meduza 谢谢,但是在将这些条目添加到 environment.rb 之后,我得到了包含“config”的行的 phusion 异常。我的 application.rb 文件已经有“config.assets.enabled = true”条目。所以我将您的第二个条目添加到 application.rb 但得到了相同的(原始)错误。我应该将这些条目添加到 production.rb 还是 test.rb 文件中?
    • 对不起,我在 application.rb 中有这一行!
    • 看看这个,也许对stackoverflow.com/questions/7673988/…有帮助
    • Meduza,再次感谢,但它并没有解决问题。我仍然遇到同样的错误。
    【解决方案2】:

    您的 CSS / HTML 中的 url 似乎是错误的:

    /assets/fonts/museosans_500-webfont.svg

    您应该将其更改为:

    /assets/museosans_500-webfont.svg

    保留文件在app/assets/fonts 目录中。

    【讨论】:

    • 您可能还想查看this相关答案。
    【解决方案3】:

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

    问题在于 Rails 的资产管道将资产编译到 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(例如它是一个缩小的第三方库),那么你可以使用以下方法来确保有一个 public/assets/fonts包含所有字体的目录。

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

      /assets/fonts/fonts/museosans_500-webfont.svg

      现在您的public/assets 目录将包含一个fonts 目录,并且您的 GET 请求将是满意的。

    更多详情请见this answer

    【讨论】:

      猜你喜欢
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      相关资源
      最近更新 更多