CPAN未公開のCatalyst::Plugin::UploadProgressを試す
はじめに
Catalystの開発コードがあるリポジトリを見ていると、興味深いプラグインを発見しました。そのプラグインとは、ファイルのアップロードの途中経過をプログレスバーで美しく表示するCatalyst::Plugin::UploadProgressです。残念ながら、このプラグインはまだCPANに登録されていません。そこでこのエントリでは、まだCPANで公開されていないCatalyst::Plugin::UploadProgressに含まれているデモアプリを動作させるまでの経過をレポートします。
準備: プロキシの配下でリモートのリポジトリからsvn checkoutできるようにする
プロキシの配下にあるマシンでCatalyst::Plugin::UploadProgressのコードをチェックアウトするには、まずプロキシの設定が必要です。以下の要領で設定を行うとうまくいきました。
$ vi ~/.subversion/servers [global] http-proxy-host = my.proxy http-proxy-port = 8080 http-proxy-username = my.id http-proxy-password = my.password http-compression = no
リポジトリからのチェックアウト
Catalyst::Plugin::UploadProgressのソースコードをリポジトリからチェックアウトします。
[ysano@fedora ~]$ mkdir -p svn/catalyst/ [ysano@fedora catalyst]$ cd svn/catalyst/ [ysano@fedora catalyst]$svn co http://dev.catalyst.perl.org/repos/Catalyst/trunk/Catalyst-Plugin-UploadProgress
試行錯誤: テストサーバが起動するまでの道のり
お目当てのプラグインのソースコードは無事ゲットできました。このプラグインのディレクトリを眺めていると、exampleというディレクトリが目に入りました。もしかして?と思って、exampleディレクトリを潜って色々見ていると、どうやらこのプラグインのデモアプリであることがわかりました。(にやり☆)
早速、Catalystのテストサーバを起動しようと思いましたが、実行権限が付いていませんでした。残念。ということで、実行権限を付けました。
[ysano@fedora catalyst]$ cd Catalyst-Plugin-UploadProgress/example/Upload [ysano@fedora Upload]$ chmod +x script/*.pl
これで、大丈夫と思ってテストサーバを起動してみると、うまくいきませんでした。エラーメッセージを見ると、Catalyst::Plugin::UploadProgressが@INCに入っていないようでした。そこで、とりあえず環境変数PERL5LIBにパスを通しました。
[ysano@fedora Upload]$ export PERL5LIB=/home/ysano/svn/catalyst/Catalyst-Plugin-UploadProgress/lib
もう、これで次こそ大丈夫と思ってテストサーバを起動すると、またエラーが。。。いくつかCPANモジュールが不足しているようでした。そこで、いつものようにモジュールをインストールしました。
[ysano@fedora Upload]$ sudo perl -MCPAN -e 'install Data::Uniqid' [ysano@fedora Upload]$ sudo perl -MCPAN -e 'install Catalyst::Plugin::Cache::FastMmap'
今度こそ、動作すると思いましたが、今度は-fオプションを付けろと怒られました。
[ysano@fedora Upload]$ ./script/upload_server.pl [...] [Tue Nov 22 18:27:32 2005] [catalyst] [info] Upload powered by Catalyst 5.56 Error: Standalone server must be run with the fork flag (-f) for this demo
あと-fオプションを付ければ絶対動くはずと思い、-fオプション付きでテストサーバの起動を試みると、見事起動できました。
[ysano@fedora Upload]$ ./script/upload_server.pl -f [Tue Nov 22 18:33:52 2005] [catalyst] [debug] Debug messages enabled [Tue Nov 22 18:33:52 2005] [catalyst] [warn] You are running an old script! Please update by running: catalyst.pl -nonew -scripts Upload [Tue Nov 22 18:33:52 2005] [catalyst] [debug] Loaded plugins: .------------------------------------------------------------------------------. | Catalyst::Plugin::Session::FastMmap | | Catalyst::Plugin::Cache::FastMmap | | Catalyst::Plugin::UploadProgress | | Catalyst::Plugin::Static::Simple | '------------------------------------------------------------------------------' [Tue Nov 22 18:33:52 2005] [catalyst] [debug] Loaded dispatcher "Catalyst::Dispatcher" [Tue Nov 22 18:33:52 2005] [catalyst] [debug] Loaded engine "Catalyst::Engine::HTTP" [Tue Nov 22 18:33:52 2005] [catalyst] [debug] Found home "/home/ysano/svn/catalyst/Catalyst-Plugin-UploadProgress/example/Upload" [Tue Nov 22 18:33:52 2005] [catalyst] [debug] Loaded components: .-------------------------------------------------------------------+----------. | Class | Type | +-------------------------------------------------------------------+----------+ | Upload::C::Upload | instance | | Upload::V::TT | instance | '-------------------------------------------------------------------+----------' [Tue Nov 22 18:33:52 2005] [catalyst] [debug] Loaded Private actions: .----------------------+----------------------------------------+--------------. | Private | Class | Method | +----------------------+----------------------------------------+--------------+ | /default | Upload | default | | /end | Upload | end | | /upload/done | Upload::C::Upload | done | | /upload/progress | Upload::C::Upload | progress | | /upload/form | Upload::C::Upload | form | | /upload/default | Upload::C::Upload | default | | /upload/receive | Upload::C::Upload | receive | '----------------------+----------------------------------------+--------------' [Tue Nov 22 18:33:52 2005] [catalyst] [debug] Loaded Path actions: .--------------------------------------+---------------------------------------. | Path | Private | +--------------------------------------+---------------------------------------+ | /upload/done | /upload/done | | /upload/form | /upload/form | | /upload/progress | /upload/progress | | /upload/receive | /upload/receive | '--------------------------------------+---------------------------------------' [Tue Nov 22 18:33:52 2005] [catalyst] [info] Upload powered by Catalyst 5.56 You can connect to your server at http://fedora:3000
デモアプリ(Catalyst Upload Progress Demo)を試す
ちょっとワクワクしながら、http://fedora:3000にアクセスすると、ファイルアップロードのためのフォームが表示されました。fedoraはLANで接続されており、プログレスバーが一瞬で満タンになると面白くないと思い、少し大きめのファイルをアップロードすることにしました。2005/11/11に行われた はてな技術発表会のビデオファイル(61.1MB)を試しに使いました。
アップロードするファイルの選択をして、「実行」ボタンをいざクリックすると、凄い綺麗なプログレスバーが表示されて感動しました。Web2.0の時代にふさわしいデモアプリですよ、これは。スナップショットでは伝えられませんが、アップロードが完了するとプログレスバーがフェードアウトします。カッコいいです。