Heroku:ActionController::RoutingError(没有路由匹配 [GET]“/fonts/glyphicons-halflings-regular.ttf)
Heroku: ActionController::RoutingError (No route matches [GET] "/fonts/glyphicons-halflings-regular.ttf)
我在 Heroku 上遇到以下错误:
ActionController::RoutingError (No route matches [GET] "/fonts/glyphicons-halflings-regular.ttf)
当服务器尝试从供应商资产中查找 Bootstrap 的 halflings images 时:
当我在本地使用 Puma 和 Foreman 运行 应用程序时,它工作正常,因为那些半身人图像出现了。
Heroku日志如下图:
2015-02-24T06:15:45.302830+00:00 app[web.1]: source=rack-timeout id=983308e6-3d6f-494b-b8e1-f37b39b14d42 wait=11ms timeout=20000ms service=2ms state=completed
2015-02-24T06:15:45.302416+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/puma-2.11.1/lib/puma/server.rb:375:in `process_client'
2015-02-24T06:15:45.304253+00:00 heroku[router]: at=info method=GET path="/fonts/glyphicons-halflings-regular.woff" host=fathomless-sands-8666.herokuapp.comrequest_id=983308e6-3d6f-494b-b8e1-f37b39b14d42 fwd="212.149.201.185" dyno=web.1 connect=6ms service=6ms status=404 bytes=1531
2015-02-24T06:15:45.506425+00:00 heroku[router]: at=info method=GET path="/fonts/glyphicons-halflings-regular.ttf" host=fathomless-sands-8666.herokuapp.comrequest_id=41275bad-2ed7-4cfd-89c5-d223b6063d62 fwd="212.149.201.185" dyno=web.1 connect=28ms service=37ms status=404 bytes=1531
2015-02-24T06:15:45.476848+00:00 app[web.1]: Started GET "/fonts/glyphicons-halflings-regular.ttf" for 212.149.201.185 at 2015-02-24 06:15:45 +0000
2015-02-24T06:15:45.478340+00:00 app[web.1]:
2015-02-24T06:15:45.478344+00:00 app[web.1]: ActionController::RoutingError (No route matches [GET] "/fonts/glyphicons-halflings-regular.ttf"):
2015-02-24T06:15:45.478347+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.2/lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
2015-02-24T06:15:45.471994+00:00 app[web.1]: source=rack-timeout id=41275bad-2ed7-4cfd-89c5-d223b6063d62 wait=33ms timeout=20000ms state=ready
2015-02-24T06:15:45.478349+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.2/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
2015-02-24T06:15:45.478351+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/railties-4.0.2/lib/rails/rack/logger.rb:38:in `call_app'
2015-02-24T06:15:45.478353+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/railties-4.0.2/lib/rails/rack/logger.rb:20:in `block in call'
2015-02-24T06:15:45.478355+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.2/lib/active_support/tagged_logging.rb:67:in `block in tagged'
application.css 文件
/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the top of the
* compiled file, but it's generally better to create a new file per style scope.
*= require bootstrap/dist/css/bootstrap
*= require_self
*= require_tree .
*/
.bower.json 文件:
{
"name": "bootstrap",
"description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
"version": "3.3.2",
"keywords": [
"css",
"js",
"less",
"mobile-first",
"responsive",
"front-end",
"framework",
"web"
],
"homepage": "http://getbootstrap.com",
"main": [
"less/bootstrap.less",
"dist/css/bootstrap.css",
"dist/js/bootstrap.js",
"dist/fonts/glyphicons-halflings-regular.eot",
"dist/fonts/glyphicons-halflings-regular.svg",
"dist/fonts/glyphicons-halflings-regular.ttf",
"dist/fonts/glyphicons-halflings-regular.woff"
],
"ignore": [
"/.*",
"_config.yml",
"CNAME",
"composer.json",
"CONTRIBUTING.md",
"docs",
"js/tests",
"test-infra"
],
"dependencies": {
"jquery": ">= 1.9.1"
},
"_release": "3.3.2",
"_resolution": {
"type": "version",
"tag": "v3.3.2",
"commit": "bcf7dd38b5ab180256e2e4fb5da0369551b3f082"
},
"_source": "git://github.com/twbs/bootstrap.git",
"_target": "~3.3.2",
"_originalSource": "bootstrap",
"_direct": true
}
那些半身人可以在我项目的两个文件夹中找到:
vendor/assets/bower_components/bootstrap/dist/fonts
vendor/assets/bower_components/bootstrap/fonts
除了那些半身人图像,应用程序运行良好:
我之前删除了 public/assets
提交的目录并重新部署到 Heroku,这解决了我的老问题 感谢史蒂夫。旧问题中的错误消息(当导航栏没有出现时)与这个非常相似,所以这个问题也可能与资产有关。
如果您觉得这个问题很熟悉,请留言。非常感谢:-)
可以在 GitHub
找到部署到 Heroku 的代码
你有几个问题。
- 字体资产不在 sprockets 已知的路径中,因此在资产编译开启(即生产)时不会提供它们。
- 即使您修复了资产编译,您使用的是 bootstrap.css 的静态版本,因此无法将字体资产的路径设置为匹配 rails 放置它们的位置。
解决方案:
使用官方 bootstrap-sass bower 包,它将使用正确的字体路径编译 bootstrap。
安装 bower-sass 并移除 vanilla bootstrap:
bower uninstall bootstrap --save
bower install bootstrap-sass --save
将 application.css
移动到 application.css.scss
。在 mainfest 部分之后添加以下行。
$icon-font-path: "bootstrap-sass/assets/fonts/bootstrap/";
@import "bootstrap-sass/assets/stylesheets/bootstrap-sprockets";
@import "bootstrap-sass/assets/stylesheets/bootstrap";
您还必须确保删除此行,因为 bootstrap 的非 sass 版本已被删除。
*= require bootstrap/dist/css/bootstrap
将出售的资产路径添加到 application.rb 以便 rails 可以编译和提供它们。
您 application.rb 也需要更新,以便 Rails 知道资产所在的位置。根据官方 bootstrap-sass 文档 (https://github.com/twbs/bootstrap-sass#c-bower):
# Bower asset paths
root.join('vendor', 'assets', 'bower_components').to_s.tap do |bower_path|
config.sass.load_paths << bower_path
config.assets.paths << bower_path
end
# Precompile Bootstrap fonts
config.assets.precompile << %r(bootstrap-sass/assets/fonts/bootstrap/[\w-]+\.(?:eot|svg|ttf|woff2?)$)
# Minimum Sass number precision required by bootstrap-sass
::Sass::Script::Number.precision = [8, ::Sass::Script::Number.precision].max
这应该可以解决问题,您的字形现在应该可以加载了。
我在 Heroku 上遇到以下错误:
ActionController::RoutingError (No route matches [GET] "/fonts/glyphicons-halflings-regular.ttf)
当服务器尝试从供应商资产中查找 Bootstrap 的 halflings images 时:
当我在本地使用 Puma 和 Foreman 运行 应用程序时,它工作正常,因为那些半身人图像出现了。
Heroku日志如下图:
2015-02-24T06:15:45.302830+00:00 app[web.1]: source=rack-timeout id=983308e6-3d6f-494b-b8e1-f37b39b14d42 wait=11ms timeout=20000ms service=2ms state=completed
2015-02-24T06:15:45.302416+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/puma-2.11.1/lib/puma/server.rb:375:in `process_client'
2015-02-24T06:15:45.304253+00:00 heroku[router]: at=info method=GET path="/fonts/glyphicons-halflings-regular.woff" host=fathomless-sands-8666.herokuapp.comrequest_id=983308e6-3d6f-494b-b8e1-f37b39b14d42 fwd="212.149.201.185" dyno=web.1 connect=6ms service=6ms status=404 bytes=1531
2015-02-24T06:15:45.506425+00:00 heroku[router]: at=info method=GET path="/fonts/glyphicons-halflings-regular.ttf" host=fathomless-sands-8666.herokuapp.comrequest_id=41275bad-2ed7-4cfd-89c5-d223b6063d62 fwd="212.149.201.185" dyno=web.1 connect=28ms service=37ms status=404 bytes=1531
2015-02-24T06:15:45.476848+00:00 app[web.1]: Started GET "/fonts/glyphicons-halflings-regular.ttf" for 212.149.201.185 at 2015-02-24 06:15:45 +0000
2015-02-24T06:15:45.478340+00:00 app[web.1]:
2015-02-24T06:15:45.478344+00:00 app[web.1]: ActionController::RoutingError (No route matches [GET] "/fonts/glyphicons-halflings-regular.ttf"):
2015-02-24T06:15:45.478347+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.2/lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
2015-02-24T06:15:45.471994+00:00 app[web.1]: source=rack-timeout id=41275bad-2ed7-4cfd-89c5-d223b6063d62 wait=33ms timeout=20000ms state=ready
2015-02-24T06:15:45.478349+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.2/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
2015-02-24T06:15:45.478351+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/railties-4.0.2/lib/rails/rack/logger.rb:38:in `call_app'
2015-02-24T06:15:45.478353+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/railties-4.0.2/lib/rails/rack/logger.rb:20:in `block in call'
2015-02-24T06:15:45.478355+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.2/lib/active_support/tagged_logging.rb:67:in `block in tagged'
application.css 文件
/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the top of the
* compiled file, but it's generally better to create a new file per style scope.
*= require bootstrap/dist/css/bootstrap
*= require_self
*= require_tree .
*/
.bower.json 文件:
{
"name": "bootstrap",
"description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
"version": "3.3.2",
"keywords": [
"css",
"js",
"less",
"mobile-first",
"responsive",
"front-end",
"framework",
"web"
],
"homepage": "http://getbootstrap.com",
"main": [
"less/bootstrap.less",
"dist/css/bootstrap.css",
"dist/js/bootstrap.js",
"dist/fonts/glyphicons-halflings-regular.eot",
"dist/fonts/glyphicons-halflings-regular.svg",
"dist/fonts/glyphicons-halflings-regular.ttf",
"dist/fonts/glyphicons-halflings-regular.woff"
],
"ignore": [
"/.*",
"_config.yml",
"CNAME",
"composer.json",
"CONTRIBUTING.md",
"docs",
"js/tests",
"test-infra"
],
"dependencies": {
"jquery": ">= 1.9.1"
},
"_release": "3.3.2",
"_resolution": {
"type": "version",
"tag": "v3.3.2",
"commit": "bcf7dd38b5ab180256e2e4fb5da0369551b3f082"
},
"_source": "git://github.com/twbs/bootstrap.git",
"_target": "~3.3.2",
"_originalSource": "bootstrap",
"_direct": true
}
那些半身人可以在我项目的两个文件夹中找到: vendor/assets/bower_components/bootstrap/dist/fonts vendor/assets/bower_components/bootstrap/fonts
除了那些半身人图像,应用程序运行良好:
我之前删除了 public/assets
提交的目录并重新部署到 Heroku,这解决了我的老问题
如果您觉得这个问题很熟悉,请留言。非常感谢:-)
可以在 GitHub
找到部署到 Heroku 的代码你有几个问题。
- 字体资产不在 sprockets 已知的路径中,因此在资产编译开启(即生产)时不会提供它们。
- 即使您修复了资产编译,您使用的是 bootstrap.css 的静态版本,因此无法将字体资产的路径设置为匹配 rails 放置它们的位置。
解决方案:
使用官方 bootstrap-sass bower 包,它将使用正确的字体路径编译 bootstrap。
安装 bower-sass 并移除 vanilla bootstrap:
bower uninstall bootstrap --save bower install bootstrap-sass --save
将
application.css
移动到application.css.scss
。在 mainfest 部分之后添加以下行。$icon-font-path: "bootstrap-sass/assets/fonts/bootstrap/"; @import "bootstrap-sass/assets/stylesheets/bootstrap-sprockets"; @import "bootstrap-sass/assets/stylesheets/bootstrap";
您还必须确保删除此行,因为 bootstrap 的非 sass 版本已被删除。
*= require bootstrap/dist/css/bootstrap
将出售的资产路径添加到 application.rb 以便 rails 可以编译和提供它们。
您 application.rb 也需要更新,以便 Rails 知道资产所在的位置。根据官方 bootstrap-sass 文档 (https://github.com/twbs/bootstrap-sass#c-bower):
# Bower asset paths root.join('vendor', 'assets', 'bower_components').to_s.tap do |bower_path| config.sass.load_paths << bower_path config.assets.paths << bower_path end # Precompile Bootstrap fonts config.assets.precompile << %r(bootstrap-sass/assets/fonts/bootstrap/[\w-]+\.(?:eot|svg|ttf|woff2?)$) # Minimum Sass number precision required by bootstrap-sass ::Sass::Script::Number.precision = [8, ::Sass::Script::Number.precision].max
这应该可以解决问题,您的字形现在应该可以加载了。