rya*_*ogo 66 ruby rake ruby-on-rails rakefile
在新创建的Rails项目(由...生成rails someName)上,可以运行一些"默认"rake任务,例如:
rake testrake db:migrate问题是,这些任务在哪里被描述?默认情况下Rakefile没有所有这些任务.
此外,我检查了一些使用的项目,rspec我可以运行rake spec以运行所有测试.spec目标在哪里定义?
小智 106
如果描述你的意思是定义,耙子-W是你的朋友.例:
$ rake -W db:create
Run Code Online (Sandbox Code Playgroud)
=>
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)>'
Run Code Online (Sandbox Code Playgroud)
刚刚发现今天:)
Dan*_*nne 49
从文件夹结构自动加载Rake任务 lib/tasks/*.rake
当我们谈论任务db:migrate时,它位于rails gem中 lib/tasks/databases.rake
因此,对于特定项目,您将始终拥有项目文件夹结构中的任务以及指定gem中的所有任务.
jpg*_*eek 19
要查找定义和/或修改任务的特定文件和行号,请执行以下操作:
启动rails控制台:
rails c
Run Code Online (Sandbox Code Playgroud)
然后运行以下命令:
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
Run Code Online (Sandbox Code Playgroud)
Rake基本上可以在内部跟踪位置,并有一个漂亮的方法来根据要求显示它们.上面的代码基本上加载rake,告诉Rake跟踪文件位置,加载Rakefile(以及所有其他包含的),找到有问题的任务,并调用其上的locations方法.
从同行评论,对于rake v 10.1.0以及可能的旧版rake,您可能需要调用:tsk.actions而不是tsk.locations
您没有指定您正在使用哪个版本的rails,但在3.0.7中,db任务位于ActiveRecord gem中
lib/active_record/railties/databases.rake
Run Code Online (Sandbox Code Playgroud)
从rails 3.2.7开始,任务仍然是我在上面所说的.
| 归档时间: |
|
| 查看次数: |
20438 次 |
| 最近记录: |