新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2010-06-14

[Perl]最速セットアップ案内 Catalyst on Starman

さすがにタイトルの「最速」は言い過ぎ感たっぷりなんですが、僕でもそのくらい安直にセットアップができたという事です。
ちなみに僕はPlack/PSGIをまともに触ったことがありません。「バカでもわかるPlack/PSGI - JPerl Advent Calendar 2009」を読んで、
「へえ、そういうものがあるんだねえ(棒読み)」
などと曰う程度にしか知らないという状態です。
まあでも今のところ、オレオレWAFをこさえるつもりなど毛頭ありません。
よって、この辺は概念だけ知ってれば良いかな、と高を括っている訳です。

前提条件

これ以降は以下のソフトウェアがインストール済みである前提で書いていきます。

また、既にCatalyst 5.8.xに対応したCatalystアプリが用意できているものとします。
もしなければ、今すぐ作って下さい。NOW!!
# catalyst.pl YellowCat
以降、このCatalystアプリの事をYellowCatと呼びます。

モジュールのインストール

cpanmで以下のモジュールをインストールします。
# cpanm Module::Install::ReadmeMarkdownFromPod Plack Catalyst::Engine::PSGI Starman Server::Starter Net::Server::SS::PreFork
これらのインストールができればOKです。

2010/11/1 追記
Module::Install::ReadmeMarkdownFromPodも必要になった(か、元々必要だった?)様ですね。
一緒にインストールしないと、Starmanのインストール時にコケてしまいます。
Fetching http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/Starman-0.2007.tar.gz ... OK
Configuring Starman-0.2007 ... OK
==> Found dependencies: HTTP::Parser::XS
Fetching http://search.cpan.org/CPAN/authors/id/K/KA/KAZUHO/HTTP-Parser-XS-0.10.tar.gz ... OK
Configuring HTTP-Parser-XS-0.10 ... N/A
! Configure failed for HTTP-Parser-XS-0.10. See /root/.cpanm/build.log for details.
! Bailing out the installation for Starman-0.2007. Retry with --prompt or --force.

起動ファイル「./script/yellowcat.psgi」を作る

いきなりpsgiという拡張子のファイルが出てきますが、これはPSGI用の起動ファイルというところでしょうか。
まあ今はあまり気にせず、「起動に必要なファイル」とだけ覚えておけば良いと思います。
# cd YellowCat
# ./script/yellowcat_create.pl PSGI
これで./script/yellowcat.psgiができました。

YellowCatをStarmanで起動する

Server::Starterに付属のスクリプトstart_serverを使ってstarmanを起動します。
起動には、「./script/yellowcat.psgi」が必要になります。
# start_server --port 4000 -- starman --workers 8 ./script/yellowcat.psgi

あとはブラウザで4000番ポートにアクセスすれば、YellowCatからのレスポンスを得ることができます。

2010-07-05 追記 うまく動かない時

こんなエラーが出てうまく起動出来ない場合があるようでして。
Error while loading ./script/myapp.psgi: Can't locate YellowCat.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at ./script/yellowcat.psgi line 4.
BEGIN failed--compilation aborted at ./script/yellowcat.psgi line 4.
要するに、目の前にあるYellowCat.pmが見つけられない、そんなド近眼系女子のような振る舞いをしているんですね。
そんな時は一手間かけて./script/yellowcat.psgiを編集し、YellowCat.pmの在り処を教えてあげましょう。
#!/usr/bin/env perl
use strict;
use warnings;
use lib ( "/path/to/YellowCat/lib" );
use YellowCat;

YellowCat->setup_engine('PSGI');
my $app = sub { YellowCat->run(@_) };
ちなみに、FindBinを使って以下の様に書こうとしたところ、FindBinに怒られました。
#!/usr/bin/env perl
use strict;
use warnings;
use FindBin;
use lib ( "$FindBin::Bin/../lib" );
use YellowCat;

YellowCat->setup_engine('PSGI');
my $app = sub { YellowCat->run(@_) };
たぶん、指定先パスが異なるためと思われますが、深くツッこんで調べていないので、今のところ原因は不明です。

0 件のコメント: