てらさわです。


>     @tmpdir = Dir.mktmpdir

これは自分で削除するよりもブロック付きで呼び出した方が
良いのではないでしょうか。

これで動けばこちらの方が良いですね。
requestをclientに返すまでにtmpdirが無くなっちゃうようなので
これだとダメみたいです。
(私の環境ではうまくいきませんでした。他にいい方法があるかもしれません。)
 
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")
のように配列で渡した方がシェル経由で余計な問題が発生する可能性が
減らせて良いのではないでしょうか。
ご指摘ありがとうございます。
確かにこちらの方がよいですね。つい、うっかり書いちゃいました。