在 Heroku 上執行 Perl App
作者:gugod 發佈於:自從 Heroku Cedar Stack 正式釋出後,各種程式語言的支援也愈來愈多,由於其簡單易懂 的建構包 (buildpack) 架構,也 讓第三方開發者能自行擴充,基本上任何語言都能支援(只要能被編譯)。Perl 方面的支援, 則是由judofyr 實做出了建構包,稱之為 perloku。
要在 heroku 上建立 perloku app,要先建好 git 專案目錄,寫好 app 之後,在其中執行:
heroku create -s cedar --buildpack http://github.com/judofyr/perloku.git
這之後只要執行 git push heroku master
就可以佈署了。
perloku 定義出的 perl app 需滿足以下條件:
- Web App Server 執行檔為
"Perloku"
,必須認PORT
環境變數,並啟動 前景 行程 - 所需要的 CPAN 模組定義於
Makefile.PL
當中
也就是說基本上用什麼 web framework 都可以,但需要自行提供一個名為 Perloku
的執
行檔。官方的範例是用 Mojolicious::Lite
,Perloku
執行檔為以下內容:
#!/bin/sh
./app.pl daemon --listen http://*:$PORT
(Mojolicous 的 "daemon" 指令並不如一般 "daemonized" 是把行程放在背景執行之意,有點 混淆,但總之,就是這樣。)
一般如果寫 Plack 規格的 Web App,已經有 app.psgi
,就可以用 plackup
#!/bin/sh
plackup -p $PORT -e production
Makefile.PL
的內容大致上如下:
use ExtUtils::MakeMaker;
WriteMakefile(
NAME => '...',
VERSION => '1.0',
AUTHOR => '...',
PREREQ_PM => {
'Mojolicious' => '2.0'
}
);
由於不是寫來做成 CPAN 模組的,基本上只有 PREREQ_PM
的內容比較重要,在其中需要指
定模組名稱以及版號。實際用來安裝 CPAN 模組的是 cpanm
,並且 不會 執行模組測試。
其他幾點重點:
- Cedar Stack 有提供 可讀寫的 檔案系統,但為「短命型」的,而且每份 dyno 之間不會互通。因此不能拿檔案來做為永久型的資料儲存媒介。也就是說如 SQLite 或 DBM 這類的資料庫皆不能用。參考: Dyno Isolation
- 程式的根目錄為 /app,模組則會裝在 /app/vendor,有設定好
$PATH
指到 /app/vendor 中。 heroku run "ls"
所看見的檔案、目錄,似乎不是實際上執行 app server 的目錄。推測應該是 編譯完畢後的結果。執行 app server 的 dyno 應為他處。
目前已經把 MoreText 丟去跑,過程很順利,還不賴。 MoreText 本身是個Dancer App,但沒有使用資料庫,相對來說單純許多。有興趣者可追蹤 MoreText 源碼 以窺一二。
附帶一提,新做了一個螢幕保護系的 MoreText 應用: http://more.handlino.com/leanback 。