Rails 3.1资产管道 - 为什么我的图片在生产环境中没有预编译?

14

当运行时:

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.jsapplication.css 和所有非 JS/CSS 文件已经被添加了) - Kieran Klaassen
*.jp?g不起作用 - 因为它是全局匹配而不是正则表达式,所以?只匹配一个字符。你需要的是 config.assets.precompile += %w[*.png *.jpg *.jpeg *.gif] - Morgan Christiansson
是的,我想通了,谢谢。 - Kieran Klaassen
说实话,我以为我遇到了类似的问题,但是在花费了很多时间学习资产管道的工作原理后,我发现我只是在我的image_tag助手中传递的参数中有一个语法错误!至少在Rails 3.2.8中,没有必要更改环境文件中的任何默认值。 - Jan Hettich
3个回答

37
我找到了一个解决方案:添加到environment/production.rb
config.assets.precompile += %w[*.png *.jpg *.jpeg *.gif] 

为什么不像这行所说的那样默认添加(application.js,application.css和所有非JS / CSS)?

*.jp?g不起作用——“?”只匹配一个字符,因为它是glob匹配而不是regexp。你需要的是config.assets.precompile += %w[*.png *.jpg *.jpeg *.gif] - Morgan Christiansson
发现这是Rails 4中的一个问题。当我们将资产目录从/app/assets移动到/assets时。 - David Rice
1
为什么我们要“预编译”图像?我看不出这样做有任何意义。 - divideByZero
对于其他人来说,在Rails 5中,应该在您的config/initializers/assets文件夹中使用Rails.application.config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif) - ohhh
例如,要添加md5指纹,假设您有一些logo.png或default.png图像,当您更改它们时,它们的md5哈希值也会更改,并且结果URL中的更改将强制浏览器获取新的副本(在更改后)。 - januszm

2

服务器使用以下格式:

rails assets:precompile:all -e production

2
你是指 rake assets:precompile:all 命令吗? - Kieran Klaassen
尝试运行`rails assets:precompile -e production'。 - Michael Durrant
8
不需要使用 assets:precompile 命令来指定环境,它默认为生产环境。 - Jeff Dickey
一个快速的提示:rake assets:precompile:all 不会生成我的资产的散列(指纹)版本。因此,我回到只使用 rake assets:precompile。 - Nate Cook

0
在我的情况下,一些不兼容的 gem 正在使用类似以下的东西:
config.assets.precompile << %r(bootstrap-sass/assets/fonts/bootstrap/[\w-]+\.(?:eot|svg|ttf|woff2?)$)

移除宝石或更新它可能会解决问题。 这是因为该宝石是为旧版Rails制作的

这并没有直接从控制台输出中清楚地表明。

对于我的情况,由于当时无法更新宝石,解决方案是通过在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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接