繁体   English   中英

rake任务在哪里定义?

[英]Where are rake tasks defined?

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

  • rake test
  • rake db:migrate
  • 等等

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

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

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

刚刚发现今天:)

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

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

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

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

启动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

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

lib/active_record/railties/databases.rake

更新:

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

在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轻松地看到它们:

gem install open_gem
gem open railties

列出所有任务:

rake -P

由于许多任务来自宝石你安装它很难知道添加了哪些...

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM