2014-05-19 4 views
0

Rails 프로젝트에서 나는 Rake를 사용하여 외부에서 제공하는 특정 파일 목록을 가지고있다.Rake : 지정된 소스 디렉토리의 파일 처리

rake foofiles:process[vendor/sources] 

은 현재 내가 (소스 디렉토리 내에서 자신의 상대 경로) 파일 이름을 지정하고있어 할당 된 FileList를 사용 : 내 목표는 그래서 같은 인수로 이러한 파일의 소스 디렉토리를 지정 할 수있다 일정 :

REQUIRED_FILES = FileList[ 
    'blah.csv', 
    'subdir/something.csv', 
    'subdir/monkeys/foo.bar', 
    ... 
] 
내가 그 디렉토리에 존재하는 파일에 의존하는 작업을 할 수 있도록

가 어떻게 내 소스 디렉토리 인수로 각 파일을 붙일 수 ? 나는 위의 입력으로 rake 명령을 사용하면 내가 vendor/sources/blah.csv, vendor/sources/subdir/something.csv, vendor/sources/subdir/monkeys/foo.bar

편집에 따라 내 작업을해야 할 것, 예를 들어,

(이상적으로 아무것도 모든 해당 파일이 존재 없이 일어나지 않을 것입니다) : 배열/목록의 각 요소에 접두어를 추가하는 것은 비교적 간단합니다. 필자가 제공 한 소스 폴더 인수에 실제로 액세스 할 수 있도록 내 작업과 종속성을 구조화하는 방법에 대해 더 혼란 스럽습니다. 실제 작업을 수행하는 처리 작업에 대한 종속성으로서 새로운 prepended 파일 목록.

주요 발생 된 태스크 거입니다 내가 상단에 사용되는 구문하려면이 같은 것을보고있다 :

namespace :foofiles do 

    task :process, [:source_directory] => [???, my_newly_prepended_file_list] do |t, args| 
    # Do stuff 
    end 

end 

을하지만 작업에 :source_directory 인수를 제공하는 방법을 모른다 그 다음에 prepended를 수행 한 다음, 종속 파일로 미리 첨부 된 파일 목록을 :process 태스크로 리턴합니다.

+0

당신은 "나는 공급 업체에 따라 내 작업을해야 할 것입니다/소스/blah.csv, 공급 업체/소스/하위 디렉터리/something.csv, 공급 업체/소스/하위 디렉터리/원숭이/foo에 의해 무슨 뜻 이죠. 바 등? " 이러한 파일을 레이크 작업의 인수로 전달하거나 레이크 작업 간의 종속성 또는 다른 모든 것을 이야기하고 싶습니까? –

답변

0

난 그냥 환경 변수를 사용하여 종료입니다

suffixes = [ 
    'blah.csv', 
    'subdir/something.csv', 
    'subdir/monkeys/foo.bar', 
] 

files = suffixes.map { |suffix| File.join(prefix, suffix) } 

file_list = FileList[*files] 

, 그것은 레이크에 내장 된 인수 구현보다 내 경우에는 작업하기가 훨씬 쉽다. 나는이 같은 터미널에서 호출 할 수 있습니다 그래서 지금

namespace :foofiles do 

    REQUIRED_FILES = [...] 
    source_directory = ENV['SOURCEDIR'] || 'vendor/sources' 

    source_files = FileList[REQUIRED_FILES.map { |relative_path| File.join source_directory, relative_path }] 
    # Note: FileList can take an array inside the square brackets without needing the splat (*) operator 

    task process: source_files do 
    ... 
    end 

end 

: 나는 변수와 함께 작업하고 작업 블록 외부 (카메론은 다른 대답에 제안 된 방법으로) 추가되는 말머리 경로 내 파일리스트를 구축 할 수 있습니다이 방법 :

SOURCEDIR=some/folder rake foofiles:process 
1

접미어 배열을 유지하지 않고 왜 배열의 각 요소 시작 부분에 인수를 추가 한 다음 파일 목록을 만드시겠습니까? prefix이 전달 된 인수.

+0

내 질문을 편집했습니다. 나는 전체적인 작업/의존성 구조가 내 경우와 관련되어 있기 때문에 더 혼란 스럽다. – Inkling

관련 문제