代码之家  ›  专栏  ›  技术社区  ›  thomasfedb

Rails bin/rails文件的作用是什么?

  •  2
  • thomasfedb  · 技术社区  · 14 年前

    现在,我已经使用了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
    

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

    我在gem的根目录中也找不到rails目录,所以我有点困惑,它也隐藏在哪里。

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  5
  •   Community arnoo    7 年前

    require 运行代码。这将包括所需文件中任何类和模块之外的任何代码,以及方法声明之外的类和模块中的任何可执行代码。AS 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 ,看看 source for rails/cli 在Github中跟踪它如何工作的链。

        2
  •  4
  •   alex.zherdev    14 年前

    所有Ruby代码都是可执行代码。类/模块/方法定义也由解释器执行,因此当您这样说时 require 加载类,这是真的,因为加载类意味着执行其代码:)

    这是您要查找的文件: cli.rb . 这是铁路运输。