Amon2::Liteでmarkdownその他のリアルタイムプレビュー - すぎゃーんメモこういうの皆で共有したいよねと思ったので最近話題のPaaS、fluxflexにデプロイしてみた。
Amon2::Liteでmarkdownその他のリアルタイムプレビュー Perl Amon2::Lite というモジュールを Amon2 に添付してみました。 - TokuLog 改メ tokuhir...
http://d.hatena.ne.jp/sugyan/20110720/1311146296
fluxflex
Easy One-Click Install for Web Applications You can install various OSS in a second just with one-cl...
http://www.fluxflex.com
http://text-converter.fluxflex.comちょっとハマった点が、fluxflexにはcpanm等による自動インストール機能が無い事。自前でextlibみたいなのに放り込めばいいんだけど、これがなかなか面倒くさい。適当なcgiを書いてどのモジュールの読み込みで失敗しているか調べた結果でいろいろ添付してます。
正直、要らない物もあがってるかもしれません。
とりあえず動いたので、負荷かけない程度に遊んで下さい。
一応CGIのコード貼っておきます。
#!/usr/bin/perl
use strict;
use warnings;
use lib qw( ../lib );
use Amon2::Lite;
use Encode 'encode_utf8';
use Text::Markdown 'markdown';
use Text::Xatena;
use Pod::Simple::XHTML;
use Plack::Handler::CGI;
$ENV{REQUEST_METHOD} ||= 'GET';
$ENV{SCRIPT_NAME} ||= $0;
$ENV{PATH_INFO} ||= '/';
my $converters = {
markdown => sub {
my $text = shift;
return markdown($text);
},
xatena => sub {
my $text = shift;
return Text::Xatena->new->format($text);
},
pod => sub {
my $text = shift;
my $parser = Pod::Simple::XHTML->new;
$parser->html_header('');
$parser->html_footer('');
$parser->output_string(\my $html);
$parser->parse_string_document($text);
return $html;
},
};
get '/' => sub {
my ($c) = @_;
return $c->render('index.tt');
};
post '/preview' => sub {
my ($c) = @_;
my $converter = $converters->{$c->req->param('format')};
my $html = $converter ? $converter->($c->req->param('text')) : '';
return $c->create_response(200, ['Content-Type' => 'text/plain'], [encode_utf8($html)]);
};
Plack::Handler::CGI->new->run(__PACKAGE__->to_app);
あと、頭の方でやってるENVの初期値設定は、これが無いとエラーで動かなかった為。この辺は後でフィードバックしておきます。dotcloudの時もそうでしたが、__DATA_トークンにあったテンプレートはtmpl/index.ttに配置して動作させています。
おまけで、Text::Xatenaの出力を少し変えて(codeというclass属性をprettyprintに変更)、google code prettifyによる色付け機能を足してあります。
#ちょさん!変更出来る様にして下さい!
SuprePre記法で遊んで下さい!