【问题标题】:Removing assets from slug with slugignore, yet allow for asset precompilation使用 slugignore 从 slug 中删除资产,但允许资产预编译
【发布时间】:2014-06-20 18:10:56
【问题描述】:

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

在应用生命周期中,资产来来去去,并开始堆积。目前,我的 slug 大小为 73mb,我猜部分原因是因为我有一些高分辨率图像,一旦我不再需要它们就被删除了。

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

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

【问题讨论】:

  • 您不能将它们包含在您的.gitignore 中吗?这将阻止您开始将文件发送到 Heroku,从而允许您在本地执行 rake assets:precompile RAILS_ENV=production,从而完全避免将文件提交到 Heroku?
  • 但我使用asset_sync将所有资产上传并同步到s3(并从那里到云端)
  • 是的,我们也使用它 - 如果您使用 RAILS_ENV=production,它将从您的本地系统同步到 s3
  • 但是我每次都需要手动完成

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


【解决方案1】:

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

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

这将 slug 的大小减少到大约 40mb(从大约 90mb)

这是我的耙子扩展

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多