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:
$: << "."
require "rubygems"
require "rspec/core/rake_task"
desc "Run those specs"
task :spec do
RSpec::Core::RakeTask.new(:spec) do |t|
t.rspec_opts = %w{--colour --format progress}
t.pattern = 'spec/*_spec.rb'
end
end
task :default => :spec
任何想法为什么耙子花了很多次? 感谢
答案 0 :(得分:5)
答案 1 :(得分:3)
此解决方案对我有用:Faster rake tasks in Rails。
我必须做一点变化,我创建了一个lib/tasks/no_rails
目录并将所有不需要Rails的Rake文件放在那里,只加载那些使用上述方法的文件。
答案 2 :(得分:1)
我喜欢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
这样的轨道运行rake任务,则不要指定它。
答案 3 :(得分:0)
必须加载整个rails环境,因此即使是rake --tasks
等简单的rake任务也需要一段时间。使用rails console
或script/console
打开控制台需要相似的时间。您可能会尝试破解Ruby或Rails to speed up rake,但如果您想稍后切换到更新版本,则太多优化可能会很糟糕。由于必须加载rails环境,cleaning up routes也可能有所帮助。