18
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

HerokuにHaskellのアプリを公開する

Last updated at Posted at 2015-06-20

2020年にはもっと便利な方法があるのでこちらの記事を参照してください
HerokuにHaskellで作ったWebサービスを公開する簡単な方法 - Qiita


Haskell on Herokuを使ってHerokuにHaskellのアプリを公開する方法を残しておきます。Haskell on Heroku は Halcyonを利用したHerokuの buildpack です。

Haskellのアプリは依存ライブラリのビルドに時間がかかってしまい、Herokuへデプロイする時は15分制限に簡単に引っかかってしまうので工夫が必要です。Halcyonは別のサーバー(Amazon S3)に環境を保存しておくことでインクリメンタルビルドを可能にしてくれます。

始めに新しくHerokuのアプリを作り buildpack を設定しておきます。

$ heroku create -b https://github.com/mietek/haskell-on-heroku

$ heroku buildpacks:set https://github.com/mietek/haskell-on-heroku

##環境設定

  • ghc 7.10.1
  • cabal 1.22.6.0

を使用したいのでHerokuの環境変数に以下のように設定します。

$ heroku config:set HALCYON_GHC_VERSION=7.10.1
$ heroku config:set HALCYON_CABAL_VERSION=1.22.6.0

Haskell on Heroku はHerokuのデプロイ時の制限のためデフォルトで依存ライブラリのビルドを行わないようになっています。しかしこれだと sandbox を別に作る必要があって少し面倒くさいのでビルドを行うように修正します。この場合ビルドされたアプリはHalcyonのpublicサーバーに置かれるのでそれが嫌な場合はS3を使ってprivate storageを設定しましょう

$ heroku config:set HALCYON_NO_BUILD_DEPENDENCIES=0

##アプリを公開する
ここまで設定できたら単純なアプリでうまく行ってるかどうかを試してみましょう。.cabalファイルもちゃんと作成しましょう。

{-# LANGUAGE OverloadedStrings #-}

import System.Environment
import Web.Scotty

main = do
    env <- getEnvironment
    let port = maybe 8080 read $ lookup "PORT" env
    scotty port $ do
        get "/" $ html $ "Hello Heroku!"
$ tree .
.
├── Main.hs
└── app.cabal
$ git push heroku master
...
$ heroku ps:scale web=1
$ heroku open

うまく行きましたか?

18
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?