在新创建的Rails项目(由生成rails someName
)上,可以运行一些“默认”耙任务,例如:
rake test
rake db:migrate
- 等等
问题是,这些任务在哪里得到描述?默认值Rakefile
不具有所有这些任务。
此外,我签出了一些使用的项目,rspec
并且能够rake spec
运行所有测试。spec
目标在哪里定义?
在新创建的Rails项目(由生成rails someName
)上,可以运行一些“默认”耙任务,例如:
rake test
rake db:migrate
问题是,这些任务在哪里得到描述?默认值Rakefile
不具有所有这些任务。
此外,我签出了一些使用的项目,rspec
并且能够rake spec
运行所有测试。spec
目标在哪里定义?
Answers:
要查找定义和/或修改任务的特定文件和行号,请执行以下操作:
启动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
tsk.actions
Rake.application.tasks.find
。另外,如果负载是私人的,您可能需要发送负载。Rake.application.send(:load, 'Rakefile')
或者您可以使用Rake.application.load_rakefile
。
在Rails 3中,railties
gem定义了很多耙任务。
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_gem
gem轻松地自己查看它们:
gem install open_gem
gem open railties
列出所有任务:
rake -P
由于许多任务来自您安装的宝石,因此很难知道添加了哪些任务...
rails --help
可能有助于显示某些耙子无法完成的任务:guides.rubyonrails.org/command_line.html#bin-rails
您签出的项目可能使用了rspec-rails gem。那颗宝石定义了spec
任务。您可以在此处查看其源代码:
https://github.com/rspec/rspec-rails/blob/master/lib/rspec/rails/tasks/rspec.rake