ruby-on-rails – 如何在Rails中预编译任何资源之前运行自定义代码?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何在Rails中预编译任何资源之前运行自定义代码?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
像在一个初始化器中的东西:
Sprockets.before_precompile do
  # some custom stuff that preps or autogenerates some asset files
  # that should then be considered in the asset pipeline as if they were checked in
end

具体来说,我想运行一个gulp任务来捆绑一些Javascript与一些特殊的预处理器,我宁愿不重写我的gulpfile来获得资产管道来处理所有的东西…我也希望这可以在Heroku上工作,没有需要一个定制的buildpack,如果可能的话.有什么想法吗?推测链轮有这些类型的钩子.

解决方法

从源头可以看出,Sprockets没有这样的钩子,但是你可以使用耙子任务钩子.例如,您将创建一个启动所有预处理程序,gulp等的耙子任务,因此可以将此任务放在预编译之前.
# lib/tasks/before_assets_precompile.rake

task :before_assets_precompile do
  # run a command which starts your packaging
  system('gulp production')
end

# every time you execute 'rake assets:precompile'
# run 'before_assets_precompile' first    
Rake::Task['assets:precompile'].enhance ['before_assets_precompile']

然后,您只需运行rake资源:预编译,因此在之前执行的任务before_assets_precompile将被执行.

还要确保使用系统而不是exec,因为exec将在运行此前任务的阶段退出进程,并且不会运行资源:在预期之后自己编译.

资料来源:

> Rake before task hook
> http://www.dan-manges.com/blog/modifying-rake-tasks

猜你在找的Ruby相关文章