在一个新的(ish)rails项目中,Rakefile
看起来像这样:
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require File.expand_path('../config/application', __FILE__)
Blog::Application.load_tasks
然而rake routes
产生以下输出:
cpe-74-72-73-47:rails-blog-example djechlin$ rake routes
home_index GET /home/index(.:format) home#index
root / home#index
我不明白rake
如何工作,以便它可以到达路线文件或路线任务。根据{{3}}文档,rake
被调用为
rake [options ...] [VAR=VALUE ...] [targets ...]
但该页面没有解释目标是什么。我假设rake
文件直接在routes.rb
文件中调用Rakefile
与{{1}}无关,但我根本无法确认。
答案 0 :(得分:6)
Rakefile包含可执行的Ruby代码。在Rakefile中允许任何合法的ruby脚本。
当您触发rake routes
you call this piece of Ruby code。
答案 1 :(得分:3)
实际上,Rakefile非常相关,rake不会直接在routes.rb上调用。 Rake需要一个rakefile。魔法发生在load_tasks
内部,它加载了框架附带的Rails特定的Rake任务。
当你调用Rake时,它会查找一个Rakefile。 Rakefile只是Ruby。在默认的Rakefile中,首先它包含../config/application
,其中定义了应用程序类(Blog::Application
);然后它调用由load_tasks
提供的Rails::Application
Blog::Application
,{{1}}继承。{/ p>
从那里开始,Rails的每个部分都有一百万种方法可以使Rake任务可用。通常,核心库提供了暴露任务的Rail关系。