2019年5月2日 星期四

在Heroku上發佈MochiWeb

# project 為你的專案名
project="wushark"
# 下載 mochiweb 並 建立你的專案
git clone git://github.com/mochi/mochiweb.git
cd mochiweb && make app PROJECT=$project && cd ..
git init $project
cd $project
# 修正: 因 Heroku 的 port 為亂數,造成無法連線逾時
sed -i '' 's|, 8080||g' src/wushark_sup.erl
echo '
web_specs(Mod) ->
Port = port(),
web_specs(Mod, Port).
port() ->
case os:getenv("PORT") of
false ->
8080;
Other ->
list_to_integer(Other)
end.' >> src/wushark_sup.erl
git add .
git commit -m "Add mochiweb"
# 設定deploy的指令
echo 'web: erl -pa ebin deps/*/ebin -noshell -noinput -s wushark' > Procfile
git add Procfile
git commit -m "setup Procfile"
# 使用 OTP 20.1
echo OTP-20.1 > .preferred_otp_version
git add .preferred_otp_version
git commit -m "Select 20.1 as preferred OTP version"
# 登入
heroku login
# 因官方的 buildpack 太久,所以用我建的 buildpack 代替
heroku create $project --buildpack https://github.com/yycking/heroku-buildpack-erlang.git
git push heroku master
# 發佈 local server
make
./start-dev.sh
view raw heroku-erl.sh hosted with ❤ by GitHub
注意:
  1. 官方https://github.com/heroku/heroku-buildpack-erlang.git過舊(OTP和cebar),所以需要替代方案
  2. Heroku的port是亂數產生,所以需要動態拿到port
參考