Mojolicious::Liteで作ったアプリをHerokuで動かす

@nqounetです。

Mojolicious::Liteに限らず、PerlのアプリはHerokuで簡単に動かせる、ということなので試してみました。

まとめ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
mkdir myapp && cd myapp
git init
mojo generate lite_app myapp.pl
heroku create --buildpack https://github.com/pnu/heroku-buildpack-perl.git
touch app.psgi
echo 'requires "Mojolicious";' > cpanfile
echo 'web: starman --preload-app --port $PORT myapp.pl psgi' > Procfile
git add .
git commit -m 'go to heroku'
git push heroku master
heroku open

heroku buildpack

Herokuではbuildpackという仕組みで、Perl製のウェブアプリも動かすことができます。

上で紹介した記事が推奨している https://github.com/pnu/heroku-buildpack-perl は使いやすいです。

cpanfile

依存モジュールを、cpanfileに書いておくと自動的にインストールされます。

1
requires 'Mojolicious';

app.psgi vs Procfile

上記のbuildpackでは、基本的にはPSGIの規格に沿ったapp.psgiを用意する必要があるのですが、適切にProcfileを書けばapp.psgiは空でも問題ありません。(app.psgiという名前のファイルが存在すればbuildpackが有効になります)

その辺を利用して、Mojolicious::Liteで作成したアプリを(とりあえず)PSGIとして動かすようにProcfileに書いておきます。

上記のbuildpackでは、標準でstarmanがインストールされるので、それを利用します。

1
web: starman --preload-app --port $PORT myapp.pl psgi

hypnotoadで動かしたい

Mojoliciousのhypnotoadでも動作させられるのですが、portの設定をファイルに書く必要がある(コマンドのオプションでは指定できないっぽい)ので、ちょっと面倒です。

どうしてもhypnotoadで動かしたい場合は適宜お調べください。

Procfileの応用

app.psgiよりもProcfileが優先されるので、応用すればapp.plで起動するようなアプリを動かすことも可能ですよ。

1
web: perl app.pl

cpanモジュールを使う手もある?

実は、Mojolicious::Command::deploy::herokuを使うと簡単に動かせるらしいのですが…。

Deploy Perl Mojolicious web apps to Heroku

二段階認証に対応していないのか、私の環境ではうまく動作しませんでした。

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy