【问题标题】:Rails 5.1.2 bootstrap icons not being served in productionRails 5.1.2 引导图标未在生产中提供
【发布时间】:2018-03-19 06:08:26
【问题描述】:

这是一个很棒的地方。我希望尽快有能力提供解决方案。

请有人帮忙!!?!

我已经观看了几个小时的 youtube,并阅读了网络上关于资产管道预编译的每篇文章。

无论出于何种原因,我决定使用 Rails 5.1.2,但我不知道这是否是问题所在。

glyphicons 不会在 Heroku 上渲染或使用

rails s -e production 

在我的本地 ubuntu 上。

我输入

rake assets:precompile RAILS_ENV=production

得到

I, [2018-01-01T16:05:07.261287 #4745]  INFO -- : Writing /home/dracos/rails/video-store/public/assets/glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf
I, [2018-01-01T16:05:07.261968 #4745]  INFO -- : Writing /home/dracos/rails/video-store/public/assets/glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf.gz
I, [2018-01-01T16:05:07.263049 #4745]  INFO -- : Writing /home/dracos/rails/video-store/public/assets/glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff
I, [2018-01-01T16:05:07.264510 #4745]  INFO -- : Writing /home/dracos/rails/video-store/public/assets/glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff2
I, [2018-01-01T16:05:07.289833 #4745]  INFO -- : Writing /home/dracos/rails/video-store/public/assets/application-c29c47294834d3d47956f910a3182df4a7db7d5864e82c6f758027f30669bafb.js
I, [2018-01-01T16:05:07.290028 #4745]  INFO -- : Writing /home/dracos/rails/video-store/public/assets/application-c29c47294834d3d47956f910a3182df4a7db7d5864e82c6f758027f30669bafb.js.gz
I, [2018-01-01T16:05:14.175848 #4745]  INFO -- : Writing /home/dracos/rails/video-store/public/assets/application-b896db4d9b9e69049347e71a1825dcdc1a4eed9147196fdd761afe6f12b556d4.css
I, [2018-01-01T16:05:14.176068 #4745]  INFO -- : Writing /home/dracos/rails/video-store/public/assets/application-b896db4d9b9e69049347e71a1825dcdc1a4eed9147196fdd761afe6f12b556d4.css.gz

但是在 log/production.log 我得到了

致命 -- : [849248f2-cd3c-4912-a10d-4f63bd5857ae] ActionController::RoutingError(没有路由匹配 [GET] "/assets/glyphicons-halflings-regular.ttf"):

致命 -- : [dfae9054-ad8a-4553-85a3-c55d55b1946c] ActionController::RoutingError(没有路由匹配 [GET] "/assets/glyphicons-halflings-regular.woff"):

等等……

我不明白?!?我不会假装了解资产管道引擎盖下发生的所有巫术,并且现在不想成为新手,但是这个!?!?为什么?谁能告诉我?

我的 /app/assets/stylesheets/bootstrap.css 已修改为显示

@font-face {
    font-family: 'Glyphicons Halflings';

    src: url('../assets/glyphicons-halflings-regular.eot');
    src: url('../assets/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), 
    url('../assets/glyphicons-halflings-regular.woff2') format('woff2'),   
    url('../assets/glyphicons-halflings-regular.woff') format('woff'), 
    url('../assets/glyphicons-halflings-regular.ttf') format('truetype'), 
    url('../assets/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}

而且,有趣的是,/assets/ 部分会被添加,即使我将其完全排除在上述文件的 url 路径之外。我已经尝试了一切。任何人都可以帮忙吗?任何帮助将不胜感激。

干杯

【问题讨论】:

    标签: ruby-on-rails asset-pipeline glyphicons bootstrap-sass


    【解决方案1】:

    如果您希望将资产仅保存在 /assets 文件夹中,而不是保存在 /public 文件夹中。

    首先,您可以将所有 glyohicons 的字体文件放在 /assets/fonts 文件夹中。 (如果 /fonts 未创建,则创建一个)。

    其次,通过重命名将.css文件转换为.scss文件,以便您可以在样式表中使用assets_path方法

    然后,通过在 application.rb 文件中添加以下行,让您的应用程序知道您也有字体作为资产

    config.assets.paths << "#{Rails.root.to_s}/app/assets/fonts"
    

    然后,按照以下方式更改 bootstrap.scss 文件中的 url。

    src: url(asset_path('glyphicons-halflings-regular.eot'));
    

    重新启动服务器并检查,字体应该作为资产加载。

    谢谢。

    【讨论】:

    • 是的!作品。但不需要执行 config.assets.paths
    【解决方案2】:

    您可以编写资产管道,您可以将字体文件移动到公共文件夹,例如在 public/assets 中创建名为 fonts 的文件夹,其中看起来 public/assets/fonts/ 然后在此处上传您的字体文件,看起来像 public/assets/fonts/glyphicons-halflings-regular.woff 并更改路径/assets/fonts/glyphicons-halflings-regular.woff/assets/glyphicons-halflings-regular.wof

    希望能帮到你

    【讨论】:

      【解决方案3】:

      你可以按照这个方法解决这个问题-

      1. 在 app/assets 目录中创建一个文件夹名称“fonts”,并将引导字体(glyphicons-halflings-regular.eot、glyphicons-halflings-regular.ttf、glyphicons-halflings-regular.woff 等)字体放置在字体目录。
      2. 现在将此行添加到 config/application.rb

        config.assets.paths << Rails.root.join("app", "assets", "fonts")
        
      3. 现在您必须将 app/assets/stylesheets/application.css 重命名为 app/assets/stylesheets/application.css.scss 并放置以下代码-

        @font-face {
         font-family: 'Glyphicons Halflings';
         src: url(asset-path("glyphicons-halflings-regular.eot"));
         src: url(asset-path("glyphicons-halflings-regular.eot?#iefix")) format("embedded-opentype"),
             url(asset-path("glyphicons-halflings-regular.woff2")) format("woff2"),
             url(asset-path("glyphicons-halflings-regular.woff")) format("woff"),
             url(asset-path("glyphicons-halflings-regular.ttf")) format("truetype"),      
            url(asset-path("glyphicons-halflings-regular.svg#glyphicons_halflingsregular")) format("svg");
        }
        
      4. 现在将字体添加到 config/initializers/assets.rb 以预编译其他资产。

        Dir.glob("#{Rails.root}/app/assets/fonts/**/").each do |path|
          Rails.application.config.assets.paths << path
        end
        
      5. 重启网络服务器。

      我希望现在它应该可以工作了。

      【讨论】:

        【解决方案4】:

        fool-dev 的回答为基础...使用 Rails 5.1.4、yarnwebpacker...所需要的只是复制引导程序字体文件从bootstrap/dist/fonts/public/fonts 并重新部署。

        根本不必弄乱提供的bootstrap/dist/css/bootstrap.* 文件。

        【讨论】:

        • 感谢@DaveCollins。从那以后,我现在已经很好地适应了这种情况,可以直接访问 CDN。最初使用 CDN 时我感觉不舒服,因为机制太隐蔽了,我无法掌握发生了什么。
        猜你喜欢
        • 1970-01-01
        • 2014-04-13
        • 2022-11-10
        • 2016-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-21
        • 2013-07-28
        相关资源
        最近更新 更多