rails bin / rails文件的工作方式/内容

时间:2010-07-01 10:32:07

标签: ruby-on-rails ruby rubygems

现在,我已经使用Rails足以知道rails命令做了什么,但 它对我感兴趣。

bin / rails文件(来自github)如下:

#!/usr/bin/env ruby

begin
  require "rails/cli"
rescue LoadError
  railties_path = File.expand_path('../../railties/lib', __FILE__)
  $:.unshift(railties_path)
  require "rails/cli"
end

据我所知(如果我错了请纠正我),要求不运行代码,只加载类等。

我也找不到他们的gem根目录中的rails目录,所以我也有点困惑。

感谢。

2 个答案:

答案 0 :(得分:5)

require会运行代码。这将包括所需文件中任何类和模块之外的任何代码,以及方法声明之外的类和模块中的任何可执行代码。正如neutrino所说,ruby解释器正在运行所需文件中的代码,以便在源中定义类。但是,如果您尝试使用具有明显副作用的内容(例如puts语句),这可能会更清楚。

试试这个简单的例子。创建一个包含hello.rb的文件puts "Hello World",然后进入irb:

irb(main):001:0> require 'hello'
Hello World
=> true

接下来,尝试一个简单类的示例,其中包含一些可执行代码。创建一个包含以下内容的文件hello2.rb

class Hello
  puts "class Hello being defined"
end

然后从irb:

要求这个
irb(main):001:0> require 'hello2'
class Hello being defined
=> true

回到bin/rails,查看Github中的source for rails/cli,了解其工作原理。

答案 1 :(得分:4)

所有ruby代码都是可执行代码。类/模块/方法定义也由解释器执行,所以当你说require加载类时,它是真的,因为加载一个类意味着执行它的代码:)

以下是您要查找的文件:cli.rb。它在铁路上。