PhotoXP: 2004年4月アーカイブ
世間はゴールデンウィークですが、日曜プログラマーとしてはプログラミングにまとまった時間を使える千載一遇のチャンス。
そこで、公開後もいまひとつインストールしてくれるユーザの増えないPhotoXPの弱点について、いろいろとご意見を頂いて、さっそく実行、実現してみようと言うコーナーです。
例:
例:
- インストール用スクリプトを作成するべし。 … UNIX環境なら展開するだけで動くのですが、まだ難しいでしょうか。。。
- 写真を見せるなら黒バックでないと。 … 少し試してみたのですが、今ひとつデザインが決まらないんです。。テンプレートをデザインしてくれる人募集中。
- Web上で設定出来ないので面倒。…板ごとの設定ファイルboard.confは将来的にWebから操作出来るようにする予定。
- アクセス制限機能が無いと不安だ。…要望が出てきたら実装しようと思っているものの、まだ何もやってません。。。
- IISで動くようにしてよ!… 今やってます。
- Rubyの使えるレンタルサーバ情報を知りたい。… こことか、このへんで探してみてはどうでしょう。
- Rubyをやめてメジャーな言語Perlで書き直そう。… ごもっともですが、手間を考えると非現実的かも。。。
Windows+IIS環境へのインストール手順解説です。具体的な環境は、Windows XP Professional(SP1)とそれに付属しているIIS 5.1になります。
筆者がIISは今回初めてさわってみたという全くの素人なので、インストール手順に抜けや間違い等がありましたらご指摘頂ければと思います。
まず、「コントロールパネル」の「管理ツール」->「インターネット インフォメーション サービス」を開いてIISの設定画面を表示します。ここで、ローカルコンピュータからツリーを開いていって、「既定のWebサイト(手のひらに地球アイコン)」を右クリックし、プロパティを表示します。 そして、タブの中から「ホームディレクトリ」を選びます。

次に、ダイアログ右下の方にある「構成」をクリック。

「追加」をクリックして、拡張子「.rcgi」に対して「C:\ruby\bin\rubyw.exe "%s" %s」が実行されるように設定します。

これで、.rcgiの拡張子を持つファイルはCGIスクリプトとしてRubyを使って実行されるように設定出来ました。
このままだと、ファイル所有権の関係かアップロードした画像ファイルがIIS経由だと読めないという事態に陥ってしまいます。そこで、C:\Inetpub\wwwroot\photoxp\imageフォルダのプロパティを開いて、下記のように共有の設定をします。

さらに、もう一つ。RubyのCGIセッション管理モジュールが使う一時ファイル用のディレクトリを作ります。これをやらないと、RubyのCGIモジュールはセッションデータファイルを作るけ読めないため正しく動作しません。
とりあえずここではC:\tmpというフォルダを作り、imageディレクトリと同様に共有設定をします。
さらに、C:\Intepub\wwwroot\photoxp\lib\photoxp\action.rbをエディタで開いて、以下のように'tmpdir' => "c:/tmp"とセッション用のテンポラリフォルダを明示的に指定してやります。
RubyとImageMagickのインストール
Windows版RubyとImageMagickに関しては、PhotoXPをWindows+Apache環境にインストールを参照してあらかじめインストールしておいてください。IISの設定
IISはあらかじめインストールされてるとして、C:\Inetpub\wwwrootの下にコンテンツが置かれている事を前提に話を進めます。まず、「コントロールパネル」の「管理ツール」->「インターネット インフォメーション サービス」を開いてIISの設定画面を表示します。ここで、ローカルコンピュータからツリーを開いていって、「既定のWebサイト(手のひらに地球アイコン)」を右クリックし、プロパティを表示します。 そして、タブの中から「ホームディレクトリ」を選びます。

次に、ダイアログ右下の方にある「構成」をクリック。

「追加」をクリックして、拡張子「.rcgi」に対して「C:\ruby\bin\rubyw.exe "%s" %s」が実行されるように設定します。

これで、.rcgiの拡張子を持つファイルはCGIスクリプトとしてRubyを使って実行されるように設定出来ました。
PhotoXPのインストール
PhotoXPを展開
PhotoXPをダウンロードし、C:\Inetpub\wwwrootの下で展開、photoxp.cgiのファイル名をphotoxp.rcgiに変更します。C:\Inetpub\wwwroot\photoxp\photoxp.rcgi
ImageMagickのconvertコマンドのパスを修正
config.rbを開いて、convertコマンドの位置をフルパスで指定します。ここでは/でなく\であることに注意してください。CONVERT_COMMAND = 'C:\Program Files\ImageMagick-6.1.5-Q16\convert.exe'
imageディレクトリの共有設定
ここらへんから、IISの謎な設定です。(単に私理解できてないだけですが…)このままだと、ファイル所有権の関係かアップロードした画像ファイルがIIS経由だと読めないという事態に陥ってしまいます。そこで、C:\Inetpub\wwwroot\photoxp\imageフォルダのプロパティを開いて、下記のように共有の設定をします。

さらに、もう一つ。RubyのCGIセッション管理モジュールが使う一時ファイル用のディレクトリを作ります。これをやらないと、RubyのCGIモジュールはセッションデータファイルを作るけ読めないため正しく動作しません。
とりあえずここではC:\tmpというフォルダを作り、imageディレクトリと同様に共有設定をします。
さらに、C:\Intepub\wwwroot\photoxp\lib\photoxp\action.rbをエディタで開いて、以下のように'tmpdir' => "c:/tmp"とセッション用のテンポラリフォルダを明示的に指定してやります。
def open_session
File.umask(0066)
@session = CGI::Session.new(@cgi, {'prefix' => 'photoxp_', 'tmpdir' => "c:/tmp"})
end
def start_session
File.umask(0066)
@session = CGI::Session.new(@cgi, {'prefix' => 'photoxp_', 'new_session' => true, 'tmpdir' => "c:/tmp"})
end
以上でインストール完了です。http://127.0.0.1/photoxp/photoxp.rcgiにアクセスして、「写真の投稿」から投稿をしてみてください。
Rubyをサポートしてる事で有名な、無料ホスティングサービスXREAでPhotoXPを動かしてみました。
結論としては、ファイルを展開して転送するだけであっさりと動作。
ただ、一つ致命的な問題があって、負荷対策のため実行時間が30秒を越えるタスクとCPU使用率が15%を越えるタスクは、強制終了される仕様になっているため、ImageMagickのconvertコマンド1回ならOKなのですが、2連続で呼び出すと途中で強制終了されてしまうようです。
現在はSMLの3サイズの縮小画像を生成してるのですが、Lサイズを生成しないといった、回避策を考え中。。。
結論としては、ファイルを展開して転送するだけであっさりと動作。
ただ、一つ致命的な問題があって、負荷対策のため実行時間が30秒を越えるタスクとCPU使用率が15%を越えるタスクは、強制終了される仕様になっているため、ImageMagickのconvertコマンド1回ならOKなのですが、2連続で呼び出すと途中で強制終了されてしまうようです。
現在はSMLの3サイズの縮小画像を生成してるのですが、Lサイズを生成しないといった、回避策を考え中。。。
