在新创建的Rails项目(由rails someName
生成)上,可以运行一些“默认”rake任务,如:
rake test
rake db:migrate
问题是,这些任务在哪里被描述?默认Rakefile
没有完成所有这些任务。
此外,我检查了一些使用rspec
的项目,我可以运行rake spec
来运行所有测试。 spec
目标定义在哪里?
答案 0 :(得分:100)
如果描述你的意思是定义,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)>'
今天刚刚发现:)
答案 1 :(得分:48)
从文件夹结构lib/tasks/*.rake
当我们谈论任务db:migrate时,它位于lib/tasks/databases.rake
因此,对于特定项目,您将始终拥有项目文件夹结构中的任务以及指定gem中的所有任务。
答案 2 :(得分:17)
要查找定义和/或修改任务的特定文件和行号,请执行以下操作:
启动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方法。
来自同行评论,对于rake v 10.1.0以及可能的旧版rake,你可能需要调用: tsk.actions 代替 tsk.locations
答案 3 :(得分:5)
您没有指定您正在使用哪个版本的rails,但在3.0.7中,db
任务位于ActiveRecord gem中
lib/active_record/railties/databases.rake
从rails 3.2.7开始,任务仍然是我在上面说过的。
答案 4 :(得分:2)
在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
如果您的$EDITOR
已配置,您可以使用open_gem
gem自行查看:{/ p>
gem install open_gem
gem open railties
答案 5 :(得分:2)
列出所有任务:
rake -P
由于许多任务来自宝石你安装它很难知道添加了哪些......
答案 6 :(得分:1)
您签出的项目可能使用 rspec-rails gem。该gem定义了spec
任务。你可以在这里看到它的源代码:
https://github.com/rspec/rspec-rails/blob/master/lib/rspec/rails/tasks/rspec.rake