从 css.scss 调用时,rails 资产 url 没有摘要

Posted

技术标签:

【中文标题】从 css.scss 调用时,rails 资产 url 没有摘要【英文标题】:rails assets urls don't have digest when calling from css.scss 【发布时间】:2016-04-13 15:45:01 【问题描述】:

我将我的项目部署到生产环境中,但我的一些资产不起作用。 我在 html.erb 中使用的那些资产

<%= image_tag('outstaffing/outstaff2.svg') %>

正常工作并返回

<img src="/assets/outstaffing/outstaff2-eade8e303c63a428e7430e84866b732dae91cda0639d8d3d422c2ee86fb254aa.svg" >

但是字体和一些图像没有。 我有 app/assets/fonts/RobotoCondensedRegular.ttfapp/assets/images/common/footer.svg 我尝试从 css 文件中调用它们。

style.css.scss

@font-face 
   font-family: 'RobotoRegular';
   src: url(font-path('RobotoCondensedRegular.ttf'))  format('truetype');


#some_div
   background: asset-url('common/footer.svg');

预编译后,我有 public/assets/styles-h5digest.css

@font-face
  font-family:'RobotoRegular';
  src:url("/assets/RobotoCondensedRegular-4a7c36df4318fee50a8159c3a0ebde4572abab65447ae4a651c2fe87212302b5.ttf") format("truetype")

这应该可以,但会返回错误:

加载资源失败:服务器响应状态为 500(内部服务器错误)

服务器正在尝试加载 assets/fonts/RobotoCondensedRegular.ttf,但文件名应带有摘要。页脚图片也是如此。

我已经尝试以多种方式更改 assets.rb、production.rb 和 application.rb。此外,我尝试了我的 css 文件(css、css.scss、scss、css.erb)和助手(asset-url、image-url、asset-data-url、asset_data_path、 的不同扩展名)。

我正在使用 Rails 4.2.0 和 ruby​​ 2.2.3。

我的生产.rb

config.serve_static_files = true
config.assets.js_compressor = :uglifier
config.assets.css_compressor = :sass
config.assets.compile = false
config.assets.digest = true

我的应用程序.rb

config.assets.enabled = true
config.assets.paths << Rails.root.join('app', 'assets', 'fonts')
config.assets.paths << Rails.root.join('app', 'assets', 'images', 'img', 'main')

我的 assets.rb

Rails.application.config.assets.precompile << /\.(?:svg|eot|woff|ttf|jpg|png)\z/
Rails.application.config.assets.precompile += ['styles.css', 'careers.css', 'team.css', 'home.css', 'services.css', 'contacts.css']

来自日志的错误:

"GET /assets/fonts/RobotoCondensedBold.ttf HTTP/1.1" 500 1812 "http://...ip..../assets/application-6b568a81a81290ff96d145fa1f76bbf33919b85dad0f4235d8bf8759787a5076.css"

我认为问题出在我的服务器 (apache) 上,但我没有解决方案。

【问题讨论】:

你能在本地运行RAILS_ENV=production bundle exec rake assets:precompile吗? 在本地主机上运行它,在生产模式下运行服务器,一切都很好。推送到apache并得到同样的错误 您没有在浏览器中缓存任何内容?只有字体和图片没有摘要? 只有 css 文件中的图像和字体没有摘要)它们在文件夹中有,但在调用中没有 【参考方案1】:

我将这两个 gem 添加到我的 Gemfile 中:

gem 'rails_serve_static_assets'
gem 'rails_stdout_logging'

并设置在我的 production.rb

config.serve_static_files = false

现在所有字体和图像都运行良好。

【讨论】:

以上是关于从 css.scss 调用时,rails 资产 url 没有摘要的主要内容,如果未能解决你的问题,请参考以下文章

资产管道缓存 CSS?

无法正确编译和部署 Rails 资产

仅针对 Rails 中的一个文件进行实时资产编译

rails 4.0.0 处理 css.scss 路径,但在预编译时不附加哈希

为 sass 修改导入文件时,rails 中不符合样式

Rails 脚手架 scss 每次生成脚手架时都会重置