2014年3月3日月曜日

[heroku][yesod] YesodアプリをHeroku上にデプロイする手順

YesodアプリをHeroku上にデプロイできました!以前にローカル環境で確認したYesodチュートリアルのwebアプリケーションをHeroku上で動作させることができたので、その手順をまとめておきます。

前提環境:

  • Yesodチュートリアルのアプリケーション(Yesog)が動作している
  • gitがインストールされている
  • heroku toolbeltがインストールされている
  • 動作確認した環境の詳細
    • % ghc --version
      • The Glorious Glasgow Haskell Compilation System, version 7.6.3
    • % cabal --version
      • cabal-install version 1.18.0.2
      • using version 1.18.1.2 of the Cabal library 
    • % yesod version
      • yesod-bin version: 1.2.6
    • % heroku version
      • heroku-toolbelt/3.4.1 (x86_64-darwin10.8.0) ruby/1.9.3

デプロイ手順:

以下の手順を実行することでYosogアプリケーションをHeroku上にデプロイし、クライアントからアクセスできるようになります。
  1. Yosog.cabalをエディタで開き、以下の取り消し線部分の記述を削除する
  2. 
    
    executable         Yosog
    
        if flag(library-only)
            Buildable: False
    
        main-is:           main.hs
        hs-source-dirs:    app
        build-depends:     base
                         , Yosog
                         , yesod
    
    
    この記述があると、cabal runで以下のようなエラーが発生してしまいます。原因不明…。
    
    cabal: Cannot build the executable 'Yosog' because the component is marked as
    
    disabled in the .cabal file.
    
    
  3. YosogルートディレクトリにProfileを用意する
  4. 
    % echo "web: cabal run -- production -p $PORT" > Profile
    
    
    このファイルはHerokuがサーバーを起動する手順になります。ローカル環境でも同様のコマンドでサーバーが起動することを確認しておきましょう。
  5. gitリポジトリにファイルを登録
  6. 
    % git init .
    % git add *
    % git commit -m "Initial commit." .
    
    
  7. heroku上にアプリケーションを登録
  8. 
    % heroku create --stack=cedar --buildpack https://github.com/begriffs/heroku-buildpack-ghc.git
    
    
  9. heroku上にアプリケーションをデプロイ
  10. 
    % git push heroku master
    
    
    10分くらい時間がかかります。状況によっては15分のビルド時間制限をオーバーしてしまうこともあるようです。そのようなときには、以下の手順で別サーバーでビルドを実行することができる模様。
    
    % heroku plugins:install https://github.com/ddollar/heroku-anvil
    % heroku build -r -b https://github.com/begriffs/heroku-buildpack-ghc.git
    
以上です。
heroku open
上記のコマンドでパブリックなサーバーとして起動しているYosogアプリケーションにアクセスすることができます。GitHubでこの環境をを公開しておきます。

  • https://github.com/kurokawh/Yosog.git
  • 参考情報:

    以下、参考にした情報についてまとめておきます。複数サイトの情報を参照しつつ作業したのですが、自分の環境ではうまくいかなかった手順もありました。最終的に最も成功に近かった手順は以下のサイトの情報になります。
    以下のサイトの情報も試しましたが、いずれもクライアントからアクセスできる状態にたどりつけませんでした。
    • Haskell Buildpack Demo
      • サンプルのデプロイ、動作確認は成功。だが、自環境のYosogアプリについては、deployまで成功したが、heroku openを実行してもサーバーとは繋がらず…。
    • MacでHerokuにYesodを(Herokuに公開編)
      • この手順はバイナリをgitコミットして、コンパイルなしてサーバー上で起動する手順だと思われます。mac上でビルドしたバイナリはdeployまではできるものの、heroku openで繋がりませんでした。

    その他、新たに学習した情報のメモ

    いろいろはまったことで、自分にとっての新しい知識が少しだけ増えました。Herokuへのデプロイと直接は関係しませんが、それらもまとめておきます。
    • yesodアプリをリリースビルドする手順
      • scafoldsiteではyesod develでビルド&テストサーバーが起動されますが、リリース用のバイナリを生成するには
        • cabal install
      • を実行することになります。このコマンドを実行すると
        • dist/dist-sandbox-5ba8a016/build/Yosog/Yosog
      • が生成されます。production -p XXXという引数とともにこのバイナリを起動すると、プロダクション版のサーバーを起動できます。
        • dist/dist-sandbox-5ba8a016/build/Yosog/Yosog production -p 3000
    おわり。

    0 件のコメント:

    コメントを投稿