WEB・アプリ開発

RubyでディレクトリごとFTPで一括アップロードする方法

RubyからディレクトリごとサーバーにFTP転送する処理を書きたかったのですが、最初なかなかうまくいきませんでした。

Rubyのftpライブラリでエラー多発

RubyからFTPを使う場合net/ftpを使うのが一般的らしいです。また、これをラップしているdouble-bag-ftpsも試しました。

ですが、loginまでは正常にできるのですが、一覧取得やファイル転送をすると止まってしまったり、エラーが発生してしまいます。

例えば、以下のようなエラーです。




かなりハマりましたが、結局Rubyのライブラリーではなく、外部コマンドを使って行うことで解決しました。

スポンサーリンク

lftpで解決

lftpというコマンドです。MacでHomebrewをお使いであれば、


でインストールできるはずです。

このコマンドはかなり安定感があり、今まで一度もエラーは発生していません。また、Rubyのnet/ftpなんかは仮に正常に動いたとしてもディレクトリ全体を転送することはできないので、1ファイルごとに転送する必要がありました。ですが、lftpはディレクトリを指定し、一括で転送することができます。

Rubyからの使い方としては、こんな感じのスクリプトにしておくと


こんな出力をしてくれて、きちんと転送してくれます。


いやー、でもなんでRubyのnet/ftpはいまいち動作がおかしいんだろうか。

参考