Почему улучшение задач Rake отличается в моей локальной среде и при развертывании в Heroku Cedar? - PullRequest
9 голосов
/ 01 апреля 2012

У меня есть это в lib / tasks / foo.rake :

Rake::Task["assets:precompile"].enhance do
  print ">>>>>>>> hello from precompile"
end
Rake::Task["assets:precompile:nondigest"].enhance do
  print ">>>>>>>> hello from precompile:nondigest"
end

Когда я запускаю rake assets:precompile локально, оба сообщения печатаются.

КогдаЯ толкаю к ​​героку, печатается только не-дайджест сообщение.Тем не менее, согласно buildpack , push выполняет ту же самую команду, что и я локально.

Почему улучшение базовых ресурсов: прекомпиляция не работает на heroku, но работаетлокально

Ответы [ 2 ]

6 голосов
/ 12 апреля 2012

Я изучал эту проблему и обнаружил, что поведение assets:precompile в зависимости от того, установлены ли RAILS_ENV и RAILS_GROUPS, локально или нет.

  # This works
  → bundle exec rake assets:precompile RAILS_ENV=production
  >>>>>>>> hello from precompile:nondigest
  >>>>>>>> hello from precompile

  # This works
  → bundle exec rake assets:precompile RAILS_GROUPS=assets
  >>>>>>>> hello from precompile:nondigest
  >>>>>>>> hello from precompile
  →

  # This does not work :'(
  → bundle exec rake assets:precompile RAILS_ENV=production RAILS_GROUPS=assets
  >>>>>>>> hello from precompile:nondigest
  →

Проблема возникает из https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/sprockets/assets.rake в методе invoke_or_reboot_rake_task, если вы замените строку Rake::Task[task].invoke на ruby_rake_task task, тогда она будет работать так, как вы ожидаете.Я выяснил, почему это так, и не нашел причину.

Поскольку обе переменные установлены в пакете сборки Heroku, вы можете создать собственный пакет сборки, не устанавливая настройки как GROUP, так и ENV, хотя я думаю, что это излишне.В этом сценарии вы сможете улучшить assets:precompile:primary или assets:precompile:all и достичь результата, аналогичного вашему желаемому замыслу.

2 голосов
/ 10 апреля 2012

Вы устанавливаете RAILS_ENV=production и RAILS_GROUPS=assets?

Кроме того, согласно этой записи , Heroku не поддерживает настраиваемые задачи по компиляции активов ...

...