如何加快Ruby / Rake任务的速度

rake –tasks需要大约18秒才能运行。 这只是加载所有任务所需的时间,因此我定义的任何任务至少需要花费这么多时间来运行:

$time rake --tasks rake db:clean # Cleaning up database rake passenger:restart # Restart Application rake spec # Run specs real 0m18.816s user 0m7.306s sys 0m5.665s 

我的Rakefile:

 $: < :spec 

知道为什么rake需要多次? 谢谢

试试spring

命令行将如下所示:

 spring rake -T 

第一次运行需要更多时间,但后续运行速度非常快。

这个解决方案对我有用 : 在Rails中更快的rake任务 。

我不得不做一些变化,我创建了一个lib/tasks/no_rails目录,并将所有不需要Rails的Rake文件放在那里,只加载那些使用上述方法的文件。

我喜欢Pratik提到的解决方案,一般情况是为需要它的任务加载导轨,而不是那些不需要它的任务,对于任何rake任务而不必事先记住。

运行不需要rails的rake任务的一种侵入性较小的方法是使用-f rake选项告诉rake使用特定的Rakefile。 这样,rake就不会在所有的rails中寻找rake任务。

例如,假设您上面的任务位于项目顶层的Rakefile文件中,并且您的Rakefile没有执行任何加载Rails的操作,例如require File.expand_path('../config/application', __FILE__) ,那么可以做:

 $ rake -f Rakefile spec 

它应该更快地运行您的规范任务。 尝试$ time rake -f Rakefile -T ; 我用一个独立于轨道的Rakefile做了这个,得到了:

 real 0m1.543s user 0m1.308s sys 0m0.201s 

缺点是您必须记住每次都指定此选项,如果您想从rake db:migrate等rails运行rake任务,则不要指定它。

必须加载整个rails环境,因此即使是简单的rake任务(例如rake --tasks需要一段时间。 使用rails consolescript/console打开script/console需要相似的时间。 您可能会尝试破解Ruby或Rails 以加速rake ,但如果您想稍后切换到更新版本,则太多优化可能会很糟糕。 由于必须加载导轨环境, 清理路线也可能有所帮助。