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はいまいち動作がおかしいんだろうか。

参考

そして、一つお願いしたいことがあります。

もしこの記事がお役に立てたのなら、下のボタンからSNSでシェアするか、あなたのブログでご紹介頂けないでしょうか?検索エンジンの仕組みで、同じ問題で今困っている方の目に届きやすくなります。もちろん、私としても記事を書くモチベーションになります。

記事への要望やダメ出しを書いて頂いても嬉しいです。定期的にエゴサーチしており、今後の記事で活かさせて頂きます。よろしくお願いいたします!