サーバーへのアップロード

作成日 : 2005-09-23
最終更新日 :

ミラープログラム

まつもとゆきひろ/石塚圭樹の「オブジェクト指向スクリプト言語Ruby」には、 クラスライブラリの利用例として、mirror.rb がpp.145-149で紹介されている。 このプログラムは、ftp を利用して、リモートのファイルとローカルのファイルの同期をとるプログラムであり、 転送時にローカルのファイルとリモートのファイルでそれぞれの修正時間を比較し、 リモートのファイルが新しい場合だけリモートからローカルにファイルが転送される。

これは役に立つが、では逆にローカルのファイルが新しい場合だけ、 ローカルからリモートにファイルを転送するプログラムはどのように書けばよいだろうか。

本を参考にしてちょっと修正するだけ、と思っていた。 しかし、その見通しは甘いことがわかった。 なぜかというと、 ローカルでファイルやディレクトリを扱う操作とリモートでファイルやディレクトリを扱う操作が異なるからだ。 具体的には、リモートでファイルやディレクトリを扱うのはローカルでの扱いに比べて不自由だ。

私が Perl でローカルからリモートに転送するプログラムを作ったときは、 ファイルの修正時間をローカルとリモートで比べるのではなく、 ローカルに修正時間の基準となる基準ファイルを用意し、 この基準ファイルとローカルファイルを比較する方式としていた。

しかし Perl から Ruby に移植するのも面倒なので結局放置していた。

ftpup

自分で書くのはあきらめた。 誰か同じようなことを試しているだろうと思い調べると、 前田修吾氏が ftpup という名称で作成していました。 氏のページ http://shugo.net/ から、ソフトウェアアーカイブをたどるとあります。

付記:あるとき、ホームページのアップロードを一ヶ月ほどサボっていました。 その後、同じプログラムでアップロードを試みましたが、 タイムアウトしてしまった。 どうやら原因は、ftpがパッシブモードのみの受け付けとなったからのようだ。 パッシブモードを指定すると、うまくいくようになった。 ftpup でいえば、~/.ftpup で PASSIVE = true という行にすることだ。

Ruby 2.0 以降

Ruby 2.0 以降は、ftpup がエラーを起こすようになった。ソースコードを見たがエラーを除く方法がみつからず、 結局 Ruby をあきらめ、Windows のフリーソフトである ffftp のミラーリングアップロード機能を使うことにした。 これが最前の策ではないかと思っている (2014-11-30) 。

まりんきょ学問所Ruby の浮き輪 > サーバーへのアップロード


MARUYAMA Satosi