使用slugignore从slug中删除资产,但允许资产预编译

时间:2014-05-04 11:16:40

标签: ruby-on-rails heroku amazon-s3 assets

我使用asset_sync预编译资产并将其上传到s3。

在应用程序生命周期中,资产来来往往,并开始堆积。目前,我的slu size大小是73mb,部分原因,我想,由于我在那里有一些高分辨率的图像,一旦我不再需要它们就被删除了。

将.app / assets / images添加到.slugignore时,图像资源将不会预编译,实际上会忽略其中的图像。因此,虽然段塞尺寸减少了大约15mb,但实际上并不是很有效。

有没有更好的方法让heroku忽略我上传到s3的资产?

1 个答案:

答案 0 :(得分:0)

我找到的最佳解决方案是将预编译任务扩展为从slug中删除所有静态资产,因为它们是通过asset_sync上传的,不再需要了

原始答案: put /assets in .slugignore for Heroku deployments with asset_sync (S3/CDN)

这将块塞尺寸减小到约40mb(从大约90)

这是我的佣金延期

Rake::Task["assets:precompile"].enhance do
  return "can't run in dev" if Rails.env.development?
  puts 'my assets:precompile hook is started!'
  ["#{Dir.pwd}/public/", "#{Dir.pwd}/app/assets/"].each do |dir_path|
    records = Dir.glob("#{dir_path}**/*")
    records.each do |f|
      if f =~ /.*.png$/ or
        f =~ /.*.jpg$/ or
        f =~ /.*.gif$/ or
        f =~ /.*.gz$/ or
        f =~ /.*.ico$/ or
        f =~ /.*.eot$/ or
        f =~ /.*.svg$/ or
        f =~ /.*.woff$/ or
        f =~ /.*.ttf$/ or
        f =~ /.*.otf$/ or
        f =~ /.*.css$/ or
        f =~ /.*.js$/ or
        f =~ /.*.sass$/ or
        f =~ /.*.css$/ or
        f =~ /.*.scss$/ or
        f =~ /.*.coffee$/ or
        f =~ /.*.wav$/ then
        File.delete(f) if File.file?(f)
        puts "removing #{f}"
      end
    end
    puts Dir.glob("#{dir_path}**/*")
  end
  puts 'my assets:precompile hook is finished!'
end