Rails 3.1 资产管道 - 为啥我的图像没有为生产进行预编译?
Posted
技术标签:
【中文标题】Rails 3.1 资产管道 - 为啥我的图像没有为生产进行预编译?【英文标题】:Rails 3.1 Asset pipeline - Why my images do not precompile for production?Rails 3.1 资产管道 - 为什么我的图像没有为生产进行预编译? 【发布时间】:2011-11-08 15:30:26 【问题描述】:运行时:
rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
一切都预编译,但不是我的/app/assets/images/*
我什至尝试将此添加到我的environment/production.rb
config.assets.paths << "#Rails.root/app/assets/images"
怎么了?谢谢!
【问题讨论】:
找到了解决方案:添加到environment/production.rb
config.assets.precompile += %w[*.png *.jp?g *.gif] 为什么不是这个默认值;就像这一行所说:(application.js, application.css, and all non-JS/CSS are already added)
*.jp?g 不起作用 - ?完全匹配 1 个字符,因为它是全局匹配而不是正则表达式。你想要的是config.assets.precompile += %w[*.png *.jpg *.jpeg *.gif]
是的,我知道了,谢谢
对于它的价值,我认为我遇到了类似的问题,但是在学习了有关资产管道如何工作的更多细节之后,我发现我只是在参数中有语法错误传递给我的 image_tag 助手!至少在 Rails 3.2.8 中,不需要更改环境文件中的任何默认值。
【参考方案1】:
找到解决方案:Add to environment/production.rb
config.assets.precompile += %w[*.png *.jpg *.jpeg *.gif]
为什么不是这个默认值?就像这行说的:(application.js、application.css 和所有非 JS/CSS 都已添加)
【讨论】:
*.jp?g 不起作用 - ?恰好匹配 1 个字符,因为它是全局匹配而不是正则表达式。你想要的是config.assets.precompile += %w[*.png *.jpg *.jpeg *.gif]
发现这是 Rails 4 中的一个问题。当我们将资产目录移动到 /assets 而不是 /app/assets 时
为什么我们应该“预编译”图像?我认为这样做没有任何意义
对于其他来到这里的人,在 Rails 5 中,Rails.application.config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)
在您的config/initializers/assets
文件夹中
@divideByZero 例如要添加 md5 指纹,假设您有一些 logo.png 或 default.png 图像,当您更改它们时,它们的 md5 哈希值也会更改,并且生成的图像 URL 的更改将强制浏览器获取新副本(更改后)【参考方案2】:
对服务器使用这种格式:
rails assets:precompile:all -e production
【讨论】:
你的意思是rake assets:precompile:all
?
试试`rails assets:precompile -e production'
不需要用assets:precompile
指定环境,默认是生产环境
快速说明:rake assets:precompile:all 不会生成我的资产的散列(指纹)版本。出于这个原因,我回到只使用 rake assets:precompile【参考方案3】:
在我的情况下,一些 不兼容的 gem 正在使用类似的东西:
config.assets.precompile << %r(bootstrap-sass/assets/fonts/bootstrap/[\w-]+\.(?:eot|svg|ttf|woff2?)$)
删除 gem 或更新它可以解决问题。 这是因为 gem 是为旧版 Rails 制作的。
这并不能直接从控制台输出中清除。
在我的情况下,由于当时无法更新 gem,解决方案是删除有问题的资产路径,通过添加 application.rb
由于兼容性:
config.after_initialize do
bootstrap_index = config.assets.precompile.index(/bootstrap\/glyphicons-halflings-regular\.(?:eot|svg|ttf|woff2?)$/)
config.assets.precompile.delete_at(bootstrap_index)
end
并添加应预编译的缺失文件:
config.assets.precompile += %w( .svg .eot .woff .ttf .woff2)
【讨论】:
以上是关于Rails 3.1 资产管道 - 为啥我的图像没有为生产进行预编译?的主要内容,如果未能解决你的问题,请参考以下文章