【问题标题】:put /assets in .slugignore for Heroku deployments with asset_sync (S3/CDN)将 /assets 放入 .slugignore 以使用 assets_sync (S3/CDN) 进行 Heroku 部署
【发布时间】:2012-10-20 10:16:14
【问题描述】:
我不确定是否有现有的方法可以做到这一点,但使用 assets_sync 的想法是资产是从 S3 或某些 CDN(例如 cloudfront)提供的,因此不需要成为应用程序 slug 的一部分。是否有可能在 Heroku 上的 .slugignore 中有 /assets 并且仍然可以让 assets:precompile 和 asset_sync 工作?
如果我只是将 /assets 放在 .slugignore 中,它们不会与摘要一起编译,并且对资产的引用没有指纹,因此不起作用。
【问题讨论】:
标签:
ruby-on-rails
heroku
cdn
precompile
【解决方案2】:
编辑 .slugignore 在那里不起作用,因为排除文件在 Heroku 上的所有编译步骤之前开始。但是我们需要编译所有这些,将它们移动到 S3,然后才能删除它们。
我在我的 Rakefile 小脚本中写了一些代码,通过扩展过滤器删除所有不可用的文件:
Rake::Task["assets:precompile"].enhance do
puts 'my assets:precompile hook is started!'
dir_path = "#{Dir.pwd}/public/sites-fromfuture-net/"
records = Dir.glob("#{dir_path}**/*")
records.each do |f|
if f =~ /.*.png$/ or
f =~ /.*.jpg$/ or
f =~ /.*.eot$/ or
f =~ /.*.svg$/ or
f =~ /.*.woff$/ or
f =~ /.*.ttf$/ or
f =~ /.*.otf$/ or
f =~ /.*.css$/ or
f =~ /.*.js$/ or
f =~ /.*.wav$/ then
File.delete(f)
end
end
# puts Dir.glob("#{dir_path}**/*")
puts 'my assets:precompile hook is finished!'
end
还有一件事:我使用 heroku-deflater gem,它压缩所有 css 和 js 资产,所以我通过脚本删除所有 .css 和 .js 文件,但不删除 .css.gz 和 .js.gz文件,因为 Rails 资产检查。