74

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

  • rake test
  • rake db:migrate
  • ETC

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

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

4

7 回答 7

117

如果通过描述你的意思是定义, rake -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)>'

今天才发现这个:)

于 2013-04-04T14:39:46.760 回答
54

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

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

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

于 2011-01-20T02:36:34.433 回答
21

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

启动一个 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(和所有其他包含的文件),找到有问题的任务,并在其上调用位置方法。

根据相同的评论,对于 rake v 10.1.0 和可能的旧版本 rake,您可能必须调用:tsk.actions 而不是 tsk.locations

于 2012-09-01T08:18:00.053 回答
5

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

lib/active_record/railties/databases.rake

更新:

从 rails 3.2.7 版开始,任务仍然是我上面所说的。

于 2011-05-11T13:52:12.983 回答
2

在 Rails 3 中,railtiesgem 定义了很多 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

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

gem install open_gem
gem open railties
于 2012-06-18T23:22:41.373 回答
2

列出所有任务:

rake -P

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

于 2014-12-14T13:48:51.123 回答
1

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

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

于 2013-04-25T21:05:25.400 回答