【问题标题】:Why does Rake task enhancement differ between my local environment and when deploying to Heroku Cedar?为什么 Rake 任务增强在我的本地环境和部署到 Heroku Cedar 时会有所不同?
【发布时间】:2012-04-15 12:31:29
【问题描述】:

我在 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,推送正在执行与我在本地完全相同的命令。

为什么对基础资产的增强:预编译案例在 heroku 上不起作用,但在本地起作用?

【问题讨论】:

    标签: ruby-on-rails ruby heroku asset-pipeline


    【解决方案1】:

    我一直在研究这个问题,我发现assets:precompile 的行为取决于RAILS_ENVRAILS_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:primaryassets:precompile:all 并实现与您期望的意图相似的结果。

    【讨论】:

    • 我增强了 assets:precompile:nondigest,这似乎对我有用
    【解决方案2】:

    你在设置RAILS_ENV=productionRAILS_GROUPS=assets吗?

    另外,根据this post,Heroku 不支持自定义资产编译任务...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      相关资源
      最近更新 更多