Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

Amon2をCGIで動かした...えっCGI!?

はい、CGIです。
さくらのレンタルサーバースタンダードプランでまだ借りていて、
PerlでちゃんとWebサイトを動かすのにCGIくらいしかないのでまあやってみた。
最近東方の自作アレンジというジャンルがおもしろいなーと思い、公式のタグ検索だけだとどうも見づらいところあったのでついでに題材にしてみた。

とりあえず結果。見栄えとか、、まあ、、残念ですね。。
https://github.com/rightgo09/TouhouMyArrange

CGIでAmon2というかPlack

PSGIの仕様ってCGIでなんとかなるんかいな、とか勝手に思っていましたが、
ちゃんと用意されていた。
Plack::Handler::CGI - search.cpan.org
というか↓こちらから↑を知りました。ズルしました、すみません。
psgiファイルをCGIで実行するために勉強 - こんにちはこんにちはmonmonです!
ありがとうございます。
.psgiファイルをloadしてautoのrun。

index.cgi
#!/home/rightgo09/perl5/perlbrew/perls/perl-5.14.2/bin/perl
use strict;
use warnings;
use Plack::Loader;

my $app = Plack::Util::load_psgi('./app.psgi');
Plack::Loader->auto->run($app);

あとは普通にapp.psgi以下同を書いていけばよい。
まあ、、さすがに速度は、、アレですけれども。

.htaccess

.htaccessのDirectoryIndexにindex.cgiを設定する。
ただこのまま普通にhttp://arrange.xii.jp/にアクセスすると、でっかく404エラーと出る。
PATH_INFOになにも入ってないから、なんのディスパッチもできませんという話。
アプリ側で「env->path_info何も入ってなかったら〜」みたいな処理書くしかないかなーとも考えたけれど
ちょっと思いついて、.htaccess

DirectoryIndex index.cgi/

としたらhttp://arrange.xii.jp/で PATH_INFOの'/'が取れた。
勝手にDirectoryIndexってきちんと拡張子で終わってファイル名を指定しなければならない、と思っていたので驚いた。
いやーこういうTips的なのは何か作っていくうちに身につきますね。
そのままhttp://arrange.xii.jp/watch/sm111111みたいなURLにしたかったので、

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.cgi/$1 [L]

も追記した。
ちなみにさくらレンタルサーバだからかなのか分からないけど、
RewriteBaseがないとmod_rewriteは動かなかった。

使ったモジュール

最初はDBIを直接使っていたけれど、もう速度を気にしないつもりでO/RマッパにTengを使った。
といっても基本的な使い方しかしていないので書くことがなかった。

  • Amon2 3.27
  • Teng 0.14
  • Text::Xslate 1.5007

あ、そうだ。
テーブルの動画長さフィールド名に「length」があるのだけれど、それをText::Xslateで出すときに

[% video.length %]

としたら文字数が出るかもと思ったがそんなことなくDBのデータが出た。
videoがTeng::Rowのオブジェクトだったからかな。

まとめてきなもの

最初のページに8個しか出てこなくてページングもしていないけど、それはもう普通に公式のニコニコ動画見たほうが早いしまあいいかという感じ。
とにかく検索一覧画面でもっと詳細が見れたらいいよね、というコンセプトで作った。
あとは、自分で使ってみてちょくちょく変えていければいいかなという感じです。
以上。