我在 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
时,会打印两条消息。
当我推送到heroku时,只打印非消息性消息。但是,according to the buildpack,push正在执行与我本地完全相同的命令。
为什么基础资产的增强:预编译案例在heroku上不起作用但在本地工作?
答案 0 :(得分:6)
我一直在研究这个问题,我发现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
→
问题来自于invoke_or_reboot_rake_task
方法中的https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/sprockets/assets.rake,如果您将Rake::Task[task].invoke
行替换为ruby_rake_task task
,那么它的效果就像您期望的那样。我一直在探究为什么会这样,并且没有找到原因。
由于两个变量都是在Heroku构建包中设置的,因此您可以在不设置GROUP和ENV设置的情况下创建自定义构建包,但我认为这样做太过分了。在这种情况下,您应该能够增强assets:precompile:primary
或assets:precompile:all
并获得与您期望的意图类似的结果。
答案 1 :(得分:2)
您是否设置了RAILS_ENV=production
和RAILS_GROUPS=assets
?
另外,根据this post,Heroku不支持自定义资产编译任务......