ruby-on-rails - 为什么 Rake 任务增强在我的本地环境和部署到 Heroku Cedar 时有所不同?

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

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

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

最佳答案

我一直在研究这个问题,我发现 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
  →

问题出自https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/sprockets/assets.rakeinvoke_or_reboot_rake_task 方法中,如果您将 Rake::Task[task].invoke 行替换为 ruby_rake_task task 那么它的工作方式就像您期望的那样.我一直在研究这是为什么,但没有找到原因。

由于这两个变量都在 Heroku 构建包中设置,因此您可以创建自定义构建包而无需同时设置 GROUP 和 ENV 设置,但我认为这有点过分了。在这种情况下,您应该能够增强 assets:precompile:primaryassets:precompile:all 并获得与您期望的意图类似的结果。

关于ruby-on-rails - 为什么 Rake 任务增强在我的本地环境和部署到 Heroku Cedar 时有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9966408/

相关文章:

postgresql - PG : ERROR: relation "admin_users" does not exist

ruby-on-rails - Rails/Cappuccino应用程序未在Heroku上加载

python flask : Download a file generated on the fly AND print a response

ruby-on-rails - 我怎样才能让自动测试在失败后继续运行我的规范而不停止?

mysql - 无法销毁 Rails 中某些模型的记录

ruby-on-rails - 嵌套注册表单不显示嵌套对象的错误消息

ruby-on-rails - 将旧的 SSL 域重定向到 Heroku 上的新域(w/Rails 3)

ruby-on-rails - 无法创建 Rails 应用程序安装的 NTFS 分区

json - 使用 awk 从较大的 JSON 字符串中提取标记

ruby - If 语句和 Case 语句 - 不匹配