2011-08-03 4 views
0

ruby에서 zip 파일로 쉘 명령을 사용하고 있습니다. 그런 다음 압축 된 파일을 서버에 업로드합니다. 내가 좋아하는 루프를 사용할 때 는 :Ruby - 쉘 명령 실행이 완료 될 때까지 루비 프로그램을 지연하십시오.

dump_files.each do |dump_file| 
    Open3.popen3("zip #{zip_file} #{dump_file}") 
end 

그리고 업로드는 dump_files 배열의 마지막 파일은 업로드 ZipFile에 존재하지만, 로컬 파일이 존재하지 않습니다.

파일을 압축하는 데 시간 지연이 발생한다고 생각합니다. zip 명령 실행이 완료 될 때까지 어떻게 루비 실행을 지연시킬 수 있습니까?

+1

문제는 다른 것이어야합니다. 지연시키지 않아도됩니다. 쉘 명령을 백틱으로 실행할 때 셸 명령은 * 완료 될 때까지 Ruby로 돌아 가지 않습니다. 'sleep 10'을 시도하면 알게 될 것입니다. – Casper

+0

또한 명령 "zip .."'주위에 큰 따옴표를 사용하는 것으로 의심됩니다. 'zip ... '을 실행해야합니다. – Casper

+0

죄송합니다. 이전에 쉘 명령을 실행하기 위해 Open3.popen3()을 사용하고있었습니다. 이제는 popen3() 대신에''를 사용할 때 작동합니다. 대단히 감사합니다 – Sayuj

답변

3

는 그하면 안

`zip "#{zip_file}"  "#{dump_file}"` 

(즉, 당신은 모든 압축하는 아니에요?)

+0

왜? 커맨드 라인에서 작동합니다! – Sayuj

+0

@Sayuj : 실제로 "zip zipfile dumpfile"이라는 명령을 호출하려고합니다. 인수가있는'zip' 명령이 아닙니다. 큰 따옴표를 제거하십시오. @Denis : 그는 백틱 연산자가 이미 문자열 보간을하므로'# {} '주위에 이중 따옴표가 필요하지 않습니다. –

+0

예. 괜찮아. 내 문제는 지퍼 링 지연이 있습니다 – Sayuj

0

교체 문제를 해결할 것 대신 popen3의``사용

Open3.popen3("zip #{zip_file} #{dump_file}") 

`zip #{zip_file} #{dump_file}`