2010-02-26 2 views
14

일부 파일을 컴파일해야하는 대상이 있다고 가정 해 보겠습니다. 이 대상에는 파일을 가져 오는 전제 조건 인 다른 대상이 있습니다. 의이 말을하자레이크 작업간에 어떻게 의사 소통을합니까?

task :obtain do 
    # obtain files from somewhere 
end 

task :compile => :obtain do 
    # do compilation 
end 

이의이 :obtain 목표는 항상 동일한 폴더에 파일을 배치하지 않는 것을 가정 해 봅시다. :obtain이 발견 된 경로를 :compile에 어떻게 전달할 수 있습니까? 환경 변수?

답변

13

[ '뭔가', 내 의견으로는 바람직하다 때문에 당신이 이런 식으로 할 경우 ($ global 또는 @instance 변수와는 대조적으로) 태스크 인수로 처리하고 명령 행에서 하위 태스크를 쉽게 사용할 수 있습니다.

반면에 코드를 별도의 클래스/모듈/메소드로 유지하면 해킹의 이러한 종류를 처리 할 필요가 없으며 코드가 더 테스트 가능해질 것입니다.

+0

예. 이것이 결국 내가 그 일을 끝낸 방법입니다. 감사! – Geo

+0

ENV는 문자열을 키와 값으로 만 사용할 수 있으므로이 제한은 파일 이름의 경우에는 중요하지 않지만 다른 종류의 값을 처리 할 때는 좋은 해결책이 아닐 수 있습니다. – Dologan

10

한 방법은 전역 변수에 저장 될 것이다 :

task :obtain do 
    $obtained_dir = "/tmp/obtained" 
end 

task :compile => :obtain do 
    puts "compiling files in #{$obtained_dir}" 
end 

인스턴스 변수 (즉 @obtained_dir)도 작동한다.

또 다른 방법은 다음과 같은 방법으로 "얻을"코드를 당겨하는 것입니다 : ENV를 사용

task :obtain do 
    obtain_files 
end 

task :compile do 
    obtained_dir = obtain_files 
    puts "compiling files in #{obtained_dir}" 
end 

def obtain_files 
    #obtain files from somewhere 
    "/tmp/obtained_files" 
end 
+1

+1 이것을 수행하는 put-it-in-a-method 방법입니다. 과제 : 얻는 것이 마치 일이 아닌 것 같아서, 다른 사람들이 부르는 방법 일뿐입니다. –