2010-07-01 3 views
2

지금 레일즈에서 이 무엇을하는지 알기에 충분합니다.이 있지만 은 어떻게 처리합니까? 나에게 관심이 있습니다.rails bin/rails 파일은 어떻게 수행합니까?

는 는 는

는 내가 아는 (내가 틀렸다면 정정 해줘 제발), 코드를 실행하지 않습니다 필요로 바로로드

#!/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 
다음과 같이 (GitHub의에서)

빈/레일 파일입니다 클래스 등.

나는 또한 그들의 뿌리에 보석 디렉토리를 찾을 수 없기 때문에, 나는 그것이 숨어있는 곳에서 조금 혼란 스럽다.

감사합니다.

답변

4

require 코드를 실행합니다. 여기에는 필요한 파일의 모든 클래스 및 모듈 외부의 모든 코드와 메소드 선언 외부에있는 클래스 및 모듈의 모든 실행 가능 코드가 포함됩니다. neutrino에 따르면, 루비 인터프리터는 소스에있는 클래스를 정의하기 위해 필요한 파일에서 코드를 실행하고 있습니다. 그러나 puts 문과 같은 명백한 부작용이있는 무언가로 시도해 보면 조금 더 명확해질 수 있습니다.

간단한 예로 이것을보십시오. 파일 다음 IRB로 이동 puts "Hello World"를 포함 hello.rb 만들기 :

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

다음을, 몸의 일부 실행 코드와 간단한 클래스의 예를보십시오. 포함 된 파일 hello2.rb을 만듭니다

class Hello 
    puts "class Hello being defined" 
end 

다음 IRB에서이 필요합니다 다시 bin/rails로 돌아가서

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

, 그것이 작동하는 방법의 체인을 따라 Github에서의 source for rails/cli를보십시오.

+0

위대한 답변, 감사합니다. 이 경우 부하가 무엇을합니까? – thomasfedb

4

모든 루비 코드는 실행 코드입니다. 클래스/모듈/메소드 정의도 인터프리터에 의해 실행되므로 require 클래스가 클래스를로드한다고 말하면 클래스를로드한다는 것은 코드를 실행한다는 것을 의미합니다.

여기에 찾고있는 파일은 cli.rb입니다. 난간에 있어요.

관련 문제