2013-10-13 52 views
7

我在生产中没有摘要的情况下提供的字体资产出现问题。 只要我做耙资产:预编译,我得到:在Ruby on Rails中没有摘要的字体资源4

5futurebit-webfont-c133dbefd9e1ca208741ed53c7396062.eot 

我试图把它与字体面与资产URL,资产路径,字体链接和字体路径,但所有SCSS链接他们的最终输出路径:

/assets/5futurebit-webfont.eot 

现在我从/应用程序/资产/字体复制资产直奔/公/资产/但它并不认为这是个做到这一点的方式。

+1

我相信这个问题可能是相关http://stackoverflow.com/questions/10905905/using-fonts-with-rails-asset-pipeline –

回答

0

请确保您有在您的字体的URL声明,如字体的extention名确切的文件名:

正确:

@font-face{ 
    font-family: 'Sawasdee'; 
    src: font-url('Sawasdee.ttf') format('truetype'); 
} 

错误:

@font-face{ 
    font-family: 'Sewasdee'; 
    src: font-url('Sewasdee') format('truetype'); 
} 

我的字体文件夹:

fonts 
|_ Sewasdee.ttf 
|_ Otherfont.ttf 
2

我一直在寻找类似的问题,目前正在使用非愚蠢的摘要资产宝石:https://github.com/alexspeller/non-stupid-digest-assets

有关如何使用它的更多信息,请参见此处。 Correct use of non-stupid-digest-assets gem

现在说的是,Chris提供的链接(具体来说,https://stackoverflow.com/a/17367264/291640)似乎可以完成与没有gem本身的gem相同的链接。我知道我需要进一步研究。

+0

+1非愚蠢消化资产宝石。 Rails应该有这样的选择。 –

0

这是我们的解决方案,部分基于Sprocets的功能。它正在与Rails4合作。预编译完成后,它会自动为所有资产生成一个非摘要版本,这些资产在config.assets.precompile中列出。

# lib/tasks/assets_nondigest.rake 
require 'fileutils' 

namespace "assets:precompile" do 
    desc "Create nondigest versions of defined assets" 
    task :nondigest => :environment do 
    sprocket_task = Sprockets::Rails::Task.new ::Rails.application 
    assets = ::Rails.application.config.assets.precompile 

    paths = sprocket_task.index.each_logical_path(assets).to_a + 
     assets.select { |asset| Pathname.new(asset).absolute? if asset.is_a?(String)} 

    paths.each do |path| 
     if asset = sprocket_task.index.find_asset(path) 
     copy_target = File.join(sprocket_task.output, asset.digest_path) 
     target = File.join(sprocket_task.output, asset.logical_path) 

     sprocket_task.logger.info "Writing #{target}" 
     asset.write_to target 
     asset.write_to "#{target}.gz" if asset.is_a?(Sprockets::BundledAsset) 
     end 
    end 
    end 
end 

Rake::Task['assets:precompile'].enhance do 
    Rake::Task['assets:precompile:nondigest'].invoke 
end