2012-05-21 3 views
2

(나는 레일을 사용하지 않는)내 레이크 작업이 다른 개체를 사용할 수없는 것 같습니다.

내가 좋아에 전달 된 환경을 설정하는 레이크 작업이 : 나는 경우 지금

desc "environment" 
    task :environment do 
    env = ENV['ENV'] || 'development' 
    end 

:

rake some:task ENV=test 

내 작업입니다 다음과 같은 작업이 있습니다 :

desc "t1" 
    task :t1 [:environment] do 
    puts env 
    end 

env가 알려져 있지 않은데 그 이유는 무엇입니까?

나는 루비의 동적 특성이 작업을 수행 할 것이라고 생각 :

환경 작업을 실행, 그것은 ENV 변수를 생성하고 변수 내 다른 작업의 범위에있을 것이라는 의존성 때문에 것입니다.

어떻게 범위에 포함시킬 수 있습니까?

참고 : 중요한 경우 내 작업 중 일부는 다른 .rake 파일에 있으며, 변경 사항이있을 경우 언급 할뿐입니다.

답변

4

Rakefile은 다른 Ruby 코드와 같습니다. 블록 변수 (do-end 안에 생성 된 변수)는 블록에 대해 로컬입니다.

는 다른 블록에 표시 env 변수 단지 대신 인스턴스 변수에 할당하기 :

@env = ENV['ENV'] ... 
... 
puts @env 

또는 당신은 너무 상수 사용할 수 있습니다

MYENV = ENV['ENV'] .... 
... 
puts MYENV 

또는 외부 변수를 만들 사용하기 전에 블록 범위 :

env = nil 

task :environment do 
    env = ENV['ENV'] .... 
end 

task :othertask ... do 
    puts env 
end 
관련 문제