在哪里定义了rake任务?

在新创build的Rails项目(由rails someName生成)上,可以运行一些“默认”rake任务,如:

  • rake test
  • rake db:migrate
  • 等等

问题是,这些任务在哪里被描述? 默认的Rakefile没有所有这些任务。

此外,我检查了一些使用rspec项目,我可以运行rake spec来运行所有的testing。 spec目标在哪里定义?

Rake任务从文件夹结构lib/tasks/*.rake 。rake中自动加载

当我们谈论任务db:migrate时,例如它位于rails lib/tasks/databases.rake

因此对于一个特定的项目,您将始终拥有项目文件夹结构中的任务以及指定的gem中的所有任务。

如果通过描述你的意思是定义,耙 – W是你的朋友。 例:

 $ rake -W db:create 

=>

 rake db:create /path/to/ruby/gems/1.9.1/gems/activerecord-3.1.11/lib/active_record/railties/databases.rake:39:in `block in <top (required)>' 

刚刚发现了这个:)

要查找定义和/或修改任务的特定文件和行号,请​​执行以下操作:

启动一个rails控制台:

 rails c 

然后运行这些命令:

 require 'rake' Rake::TaskManager.record_task_metadata=true Rake.application.load 'Rakefile' tsk = Rake.application.tasks.each.find {|t| t.name =='my_task_name'} tsk.locations 

耙基本上可以跟踪内部的位置,并有一个漂亮的方法来显示他们的要求。 上面的代码基本上加载了rake,告诉Rake跟踪文件位置,加载Rakefile(和所有其他包含的文件),find有问题的任务,并调用位置方法。

从sameers的评论,对于耙V 10.1.0和可能旧版本的耙你可能不得不打电话:tsk.actions而不是tsk.locations

你没有指定你使用的是哪个版本的rails,但是在3.0.7中, db任务位于ActiveRecord的gem里

 lib/active_record/railties/databases.rake 

更新:

至于rails 3.2.7版本,这些任务仍然是我上面提到的。

在Rails 3中, railties gem定义了很多rake任务。

 railties-3.2.5/lib/rails/tasks/annotations.rake railties-3.2.5/lib/rails/tasks/documentation.rake railties-3.2.5/lib/rails/tasks/engine.rake railties-3.2.5/lib/rails/tasks/framework.rake railties-3.2.5/lib/rails/tasks/log.rake railties-3.2.5/lib/rails/tasks/middleware.rake railties-3.2.5/lib/rails/tasks/misc.rake railties-3.2.5/lib/rails/tasks/routes.rake railties-3.2.5/lib/rails/tasks/statistics.rake railties-3.2.5/lib/rails/tasks/tmp.rake railties-3.2.5/lib/rails/test_unit/testing.rake 

如果您的$EDITORconfiguration好了,您可以使用open_gem gem轻松查看它们:

 gem install open_gem gem open railties 

您签出的项目可能使用rspec-rails gem。 该gem定义了spec任务。 你可以在这里看到它的源代码:

https://github.com/rspec/rspec-rails/blob/master/lib/rspec/rails/tasks/rspec.rake

列出所有任务:

 rake -P 

由于许多任务来自gem你安装很难知道哪些是添加…