2011-02-17 4 views
6

요청시 압축 파일을 생성하는 방법.레일 3 : 요청시 압축 파일을 어떻게 생성합니까?

나는이 컨트롤러를

def create  
    send_data generate_tgz("#{RAILS_ROOT}/tmp/example.txt"), :filename => 'export.tgz'  
end 

을 가지고 있지만 그것은 나에게 generate_tgz에없는 방법을 제공합니다.

플러그인이나 보석입니까? 무엇이 필요합니까? 대신 zip 파일을 생성 할 수 있습니까?

편집 : 이것은 TGZ을 만들지 만

def generate_tgz(file) 
    system("tar -czf #{RAILS_ROOT}/tmp/export-result #{RAILS_ROOT}/tmp/export") 
    content = File.read("#{RAILS_ROOT}/tmp/export-result") 
    #ActiveSupport::Gzip.compress(content)  
end 

내가 그것을 압축을 때 얻을 응용 프로그램/c3ec2057-7d3a-40d9-9a9d-d5c3fe3ffd6f/홈/tmp를/수출/and_the_files

나는 것 다음과 같이하십시오 : export/the_files

+0

이 페이지 http://api.rubyonrails.org/classes/ActionController/Streaming.html에 주어진 예제에 대해 이야기하고 있습니까? 나는 레일즈에서 구현 된 그런 메소드가 있다고 생각하지 않는다. 그것은 단지 예일뿐입니다. – Dogbert

+0

@ 도버트 : 예, 그 예입니다. – Nerian

답변

3

메서드가 존재하지 않습니다. ActiveSupport::Gzip을 사용하면 쉽게 만들 수 있습니다.

def generate_tgz(file) 
    content = File.read(file) 
    ActiveSupport::Gzip.compress(content) 
end 
+0

니스! 내가 바꾸어야 할 유일한 것은 : filename => 'export.tgz': filename => 'export.zip'. 그리고 여러 파일을 하나로 묶는 방법은 무엇입니까? – Nerian

+0

많은 파일을 번들로 묶으려면 아카이브를 만들어야합니다. Rails는 기본적으로이 기능을 지원하지 않습니다. –

+0

나는 아카이브를 만들기 위해 쉘 호출을 사용했다. 이제는 친숙하지 않은 디렉토리 계층을 만드는 것을 제외하면 잘 작동합니다. 편집을 확인하십시오. – Nerian

관련 문제