Я не уверен, есть ли способ сделать это, но с assets_sync идея заключается в том, что ресурсы обслуживаются из S3 или некоторого CDN (например, облачного фронта), поэтому нет необходимости быть частью слага приложения. Возможно ли иметь /assets в .slugignore на Heroku и при этом заставить работать активы: прекомпиляция и актив_синхронизация? Если я просто помещу /assets в .slugignore, они не будут скомпилированы с дайджестом, а ссылки на активы будут без отпечатка пальца и, следовательно, не будут работать.
поместите /assets в .slugignore для развертываний Heroku с assets_sync (S3/CDN)
Ответы:
Редактирование .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, который сжимает все ресурсы css и js, поэтому я удаляю все файлы .css и .js скриптом, но не удаляю файлы .css.gz и .js.gz, потому что проверки активов рельсов.
Вы читали эту статью? - https://devcenter.heroku.com/articles/cdn-asset-host-rails31
В разделе «Синхронизация ресурсов», по-видимому, указано, что ресурсы могут быть предварительно скомпилированы на героку, а затем гем assets_sync загрузит их оттуда в вашу корзину s3 (как часть этапа предварительной компиляции), в статье не упоминается использование .slugignore.