まず
# amon2-setup.pl --flavor=Lite Gyazo
として雛形を作る。POSTハンドラを書く。
post '/' => sub {
my $c = shift;
my $imagedata = $c->req->param('imagedata');
$imagedata = read_file($c->req->uploads->{imagedata}->path, binmode => ':raw') unless $imagedata;
my $filename = "image/" . md5_hex($imagedata) . ".png";
write_file($filename, {binmode => ':raw'}, $imagedata);
my $url = $c->req->base() . $filename;
return $c->create_response(200, ['Content-Type' => 'text/plain'], [$url]);
};
セッション使わないのでプラグイン読み込み処理をカットして、Plack::Middleware::Staticでimageディレクトリを見える様にした。あとdotcloudで動かす為に__DATA__トークンに書かれているindex.ttをtmpl/index.ttに移した。app.psgiの全体コードはこんな感じ。
use strict;
use warnings;
use File::Spec;
use File::Basename;
use File::Slurp;
use Digest::MD5 qw( md5_hex );
use lib File::Spec->catdir(dirname(__FILE__), 'extlib', 'lib', 'perl5');
use lib File::Spec->catdir(dirname(__FILE__), 'lib');
use Plack::Builder;
use Amon2::Lite;
# put your configuration here
sub config {
+{
}
}
get '/' => sub {
my $c = shift;
return $c->render('index.tt');
};
post '/' => sub {
my $c = shift;
my $imagedata = $c->req->param('imagedata');
$imagedata = read_file($c->req->uploads->{imagedata}->path, binmode => ':raw') unless $imagedata;
my $filename = "image/" . md5_hex($imagedata) . ".png";
write_file($filename, {binmode => ':raw'}, $imagedata);
my $url = $c->req->base() . $filename;
return $c->create_response(200, ['Content-Type' => 'text/plain'], [$url]);
};
# for your security
__PACKAGE__->add_trigger(
AFTER_DISPATCH => sub {
my ( $c, $res ) = @_;
$res->header( 'X-Content-Type-Options' => 'nosniff' );
},
);
builder {
enable 'Plack::Middleware::Static',
path => qr{^(?:/static/|/robot\.txt$|/favicon.ico$|/image/)},
root => File::Spec->catdir(dirname(__FILE__));
enable 'Plack::Middleware::ReverseProxy';
__PACKAGE__->to_app();
};
最後にdotcloud.ymlに
www:
type: perl
requirements:
- File::Slurp
- Digest::MD5
- Amon2
を書いてgitでcommitした後に
# dotcloud push mattn
すれば、あとはdotcloudが自動で依存物をワンサカワンサカ入れてくれて、動くようになる。(mattnというのはdotcloud createで作った際のapplication。上記wwwはservice)できあがったサーバはこれ。
なんか知らない間にhttp://gyazo.mattn.dotcloud.comみたいなURLで公開出来なくなっちゃったので、ひとまず我慢します。
最後に一言
それAmon2じゃなくてもおk