只是一个思考。如果您使用asset_sync gem 编译资产并且不回退到在运行时编译链轮,您可以使用.slugignore 从您的slug 中删除app/assets 文件夹以减小slug 大小吗?
我已经测试过,预编译的资产不再使用资产管道提供服务。Rails 必须查找 app/assets 文件夹,如果它不可用就会变得脾气暴躁,默认为按需编译。
其他人尝试过这种效果吗?我发现的唯一一件事是在 slug-ignore 之后调用构建备份,因此如果我使用涡轮链轮,它可能会破坏部署之间的缓存。
只是一个思考。如果您使用asset_sync gem 编译资产并且不回退到在运行时编译链轮,您可以使用.slugignore 从您的slug 中删除app/assets 文件夹以减小slug 大小吗?
我已经测试过,预编译的资产不再使用资产管道提供服务。Rails 必须查找 app/assets 文件夹,如果它不可用就会变得脾气暴躁,默认为按需编译。
其他人尝试过这种效果吗?我发现的唯一一件事是在 slug-ignore 之后调用构建备份,因此如果我使用涡轮链轮,它可能会破坏部署之间的缓存。
这篇文章通过后预编译任务对此提供了很好的解决方案。我对其进行了修改以删除所有内容,包括 app/assets 文件。对于某些人来说,这可能有点激烈,但这是一种减少杂物的简单方法。
这将我的 slug 大小减少了 20mb。
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 =~ /.*.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)
puts "removing #{f}"
end
end
puts Dir.glob("#{dir_path}**/*")
end
puts 'my assets:precompile hook is finished!'
end
段塞尺寸太大的原因有很多。最常见的3个是:
我花了大约 3 个小时来研究为什么我的蛞蝓尺寸太大的所有可能性。
我需要的gem文件中的所有gem,所以它已经出来了。我尝试通过https://devcenter.heroku.com/articles/slug-compiler使用 .slugignore ,这有点帮助。
对我来说,最终的解决方案是忽略其他环境中的资产。
为此,请打开 application.rb 并添加:
config.assets.configure do |env|
if Rails.env.development? || Rails.env.test?
env.cache = ActiveSupport::Cache.lookup_store(:memory_store)
这将忽略从其他环境中提取的任何额外缓存。如果要部署到 heroku,在预编译之前,运行:
heroku config:set BUNDLE_WITHOUT="development:test". 之后,运行您的常规git push heroku master.
如果您回顾日志,您会注意到它直接跳过了开发和测试。这将我的 slug 大小减少了 50mb 以上。我希望这对某人有帮助!