Как / что делает файл rails bin / rails - PullRequest
2 голосов
/ 01 июля 2010

Теперь я достаточно использовал 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 не запускает код, просто загружает классы и т. д.

Я также не смог найти каталог rails в корне их гема, поэтому я немного запутался, где он тоже скрывается.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 01 июля 2010

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, взгляните на источник для рельсов/ cli в Github, чтобы следовать цепочке его работы.

4 голосов
/ 01 июля 2010

Весь код ruby ​​является исполняемым кодом. Определения класса / модуля / метода также выполняются интерпретатором, поэтому, когда вы говорите, что require загружает классы, это правда, потому что загрузка класса означает выполнение его кода:)

Вот файл, который вы ищете: cli.rb . Это в рельсах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...