rails:3978
From: Nobukazu TAKAI <nocturne_2_eflat_9_2@m...>
Date: Sun, 09 Feb 2014 23:02:55 +0900
Subject: [rails:3978] Re: ファイルの圧縮
てらさわ様、西山様
お答え有り難うございました。
試行錯誤した結果、所望の動作を実装できました。
ただ、試行錯誤の結果次のことが分かりました。
(1)Dir.mktmpdir do |dir| のようにブロックで実行すると send_file で download.zip をダウンロードしようとすると log に no such file or directory というエラーが出てしまう。
テンポラリーなディレクトリをどのタイミング削除するのか分からないのですが、少なくとも send_file を実行するタイミングでは既にファイルがないようです。
(2)ブロックを用いず FileUtils.remove_entry_secure tmpdir を実行しても同様に no such file or directory のエラーが出てしまいます。
なので、最終的には以下のようにしました。
テンポラリーディレクトリを /var/tmp/railstmp* とすることで、capistrano のスクリプトの中で定期的に削除するようにしました。
def download_pdf
if params[:checked_items].present?
tmpdir = Dir.mktmpdir("railstmp", "/var/tmp")
begin
items = params[:checked_items].keys
Dir.chdir(tmpdir) do
Dir.mkdir('download')
items.each do |item|
@book= Book.find(item)
if @book.pdf.present?
open("download/#{@book.pdf.filename}", 'wb'){|f| f.puts @book.pdf.data}
end
end
system("tar", "-zcf", "download.tgz", "download")
send_file("#{tmpdir}/download.tgz", filename: 'download.tgz', type: 'application/gzip')
end
ensure
# FileUtils.remove_entry_secure tmpdir
end
else
redirect_to :books, notice: 'チェックされていなかったよ'
end
end
On 2014/02/09, at 19:08, Kazuhiro NISHIYAMA <zn@m...> wrote:
> 西山和広です。
>
> 2点気になったのですが、
>
> At Sun, 9 Feb 2014 16:07:34 +0900,
> terasawan wrote:
>>
>> @tmpdir = Dir.mktmpdir
>
> これは自分で削除するよりもブロック付きで呼び出した方が
> 良いのではないでしょうか。
>
> http://docs.ruby-lang.org/ja/2.1.0/method/Dir/s/mktmpdir.html
>
>> system("zip -r download.zip download")
>
> これは固定の文字列だから問題は起きなさそうですが、普通は
> system("zip", "-r", "download.zip", "download")
> のように配列で渡した方がシェル経由で余計な問題が発生する可能性が
> 減らせて良いのではないでしょうか。
>
> http://docs.ruby-lang.org/ja/2.1.0/method/Kernel/m/system.html
>
>
> --
> |ZnZ(ゼット エヌ ゼット)
> |西山和広(Kazuhiro NISHIYAMA)
>
> --
> ML: rails@r...
> 使い方: http://QuickML.com/
3970 2014-02-08 14:11 [nocturne_2_eflat_9_2] ファイルの圧縮 @ 3971 2014-02-08 15:20 ┗[netwillnet@g... ] 3972 2014-02-08 23:26 ┗[nocturne_2_eflat_9_2] @ 3973 2014-02-09 08:07 ┗[terasawan@g... ] @ 3974 2014-02-09 08:09 ┣[terasawan@g... ] 3975 2014-02-09 09:22 ┃┗[nocturne_2_eflat_9_2] 3976 2014-02-09 11:08 ┗[zn@m... ] @ 3977 2014-02-09 15:02 ┣[terasawan@g... ] -> 3978 2014-02-09 15:02 ┗[nocturne_2_eflat_9_2]