耙任务在哪里定义?


69

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

  • rake test
  • rake db:migrate
  • 等等

问题是,这些任务在哪里得到描述?默认值Rakefile不具有所有这些任务。

此外,我签出了一些使用的项目,rspec并且能够rake spec运行所有测试。spec目标在哪里定义?


这回答了你的问题了吗?如何找到耙任务的源文件?
10/31

Answers:


50

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

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

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


4
至少在Rails 4中,数据库任务存储在ActiveRecord gem中。要查看Rake加载任务的路径,请使用rake -W task:name
Qqwy

112

如果按您的描述是指定义,耙-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)>'

今天才发现这个:)


20

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

启动Rails控制台:

rails c

然后运行以下命令:

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

Rake基本上可以在内部跟踪位置,并且有一种很漂亮的方法可以根据要求显示它们。上面的代码基本上会加载rake,告诉Rake跟踪文件位置,加载Rakefile(以及所有其他包含的文件),找到有问题的任务,然后在其上调用locations方法。

从Sameers的评论中,对于rake v 10.1.0以及可能更旧的rake版本,您可能必须调用:tsk.actions而不是tsk.locations


这是一个很好的提示!我正在处理一个应用程序,该应用程序在几个不同的库中定义了任务,要弄清楚什么任务来自何处而没有这样的技巧,可能真的很难。
史蒂夫·乔根森

那可能是适用于较早版本的Rake的代码...我有10.1.0,在其中您必须将最后一行更改为tsk.actions
sameers

@sameers-感谢您的评论。我刚刚尝试过rake-10.1.1,它可以与位置配合使用。
jpgeek 2014年

2
小提示:您不需要每个。Rake.application.tasks.find。另外,如果负载是私人的,您可能需要发送负载。Rake.application.send(:load, 'Rakefile')或者您可以使用Rake.application.load_rakefile
con--

2
@ con--谢谢。相应地更新。
jpgeek

5

您没有指定要使用的Rails版本,但是在3.0.7中,这些db任务位于ActiveRecord gem中。

lib/active_record/railties/databases.rake

更新:

从Rails版本3.2.7开始,任务仍然是我上面所述的地方。


2

在Rails 3中,railtiesgem定义了很多耙任务。

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

如果$EDITOR已配置,则可以使用open_gemgem轻松地自己查看它们:

gem install open_gem
gem open railties

2

列出所有任务:

rake -P

由于许多任务来自您安装的宝石,因此很难知道添加了哪些任务...


rails --help可能有助于显示某些耙子无法完成的任务:guides.rubyonrails.org/command_line.html#bin-rails
wasabigeek

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.