2014年2月2日日曜日

[heroku] はじめてのheroku

インターネット上の情報を参考にしながら、自分のMacにherokuを利用する上で最低限の環境を構築しrubyとHaskellのサンプルウェブアプリを動かしてみた。

Mac上の準備:

  1. MacPortsをインストール(手順はここ
  2. portsでruby19をインストール(port install ruby19。こちらの手順で複数のバージョンを選択切り換えができます)
  3. heroku toolbeltをインストール(ここからインストーラをダウンロードして、インストール)
    • 以前はruby gemでherokuをインストールしていたようです(gem install heroku)

ruby版サンプルサーバーのherokuへのデプロイ:


    % git clone git://github.com/heroku/ruby-sample.git
    % cd ruby-sample/
    % heroku create
    % git push heroku master
    % heroku open

これだけで"Hello World!"が表示されるウェブアプリが動き始めた!ローカル環境にrailsもインストールしたのですが、heroku上でサーバーを動作させるだけであればrailsのインストールは不要でした。

 Haskell版サンプルサーバーのherokuへのデプロイ:

ここの情報を参考にherokuのサンプルも動作した!

    % git clone https://github.com/pufuwozu/haskell-buildpack-demo.git
    % cd haskell-buildpack-demo/
    % heroku create --stack=cedar --buildpack https://github.com/pufuwozu/heroku-buildpack-haskell.git
    % git push heroku master
    % heroku open

このサンプルではWarp(Haskell製ウェブサーバー)を直に利用している。 自分が利用しようとしているのはウェブアプリケーションフレームワークのYesod(内部でWarpを使用)なので、Heroku上でYesodを利用する方法は別途調査が必要。こちらにはsnap(yesodとは別のweb framework)のデプロイサンプルがある。
Haskellのサーバーをheroku上で動作させる方法は、このサンプルのようにビルドパッケージを利用する方法以外に、あらかじめコンパイルしてgitリポジトリにコミットしたバイナリを動作させる方法もあるようなので、後者についても少し調べてみる予定。

Yesodのチュートリアルサンプルのデプロイ:

試しに、昨年末にローカルで動作を確認したYesodチュートリアルサンプルをheroku上にデプロイしようとしてみましたが…エラーになりました。orz

% git push heroku master
Initializing repository, done.
Counting objects: 95, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (87/87), done.
Writing objects: 100% (95/95), 78.89 KiB, done.
Total 95 (delta 28), reused 0 (delta 0)

-----> Fetching custom git buildpack... done
-----> Haskell app detected
-----> Downloading GHC
######################################################################## 100.0%
-----> Downloading Cabal
######################################################################## 100.0%
-----> Updating Cabal
Downloading the latest package list from hackage.haskell.org
Note: there is a new version of cabal-install available.
To upgrade, run: cabal install cabal-install
-----> Release the hounds! Installing application
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: Yosog-0.0.0
trying: fast-logger-2.1.5
rejecting: warp-2.0.2, 2.0.1, 2.0.0.1, 2.0.0 (conflict: Yosog => warp>=1.3 &&
<1 .4="" conflict:="" rejecting:="" trying:="" wai-2.0.0="" warp-1.3.10.1="" warp=""> wai>=1.3 && <1 .5="" 2.0.0.1="" 2.0.0="" 2.0.1.1="" 2.0.1.2="" 2.0.1="" 2.0.2="" 2.0.3.1="" 2.0.3.2="" 2.0.3="" conflict:="" rejecting:="" trying:="" wai-1.4.1="" wai-extra-2.0.3.3="" yosog=""> wai-extra>=1.3 && <1 .4="" 1.3.2.4="" 1.3.3.1="" 1.3.3.2="" 1.3.3="" 1.3.4.1="" 1.3.4.2="" 1.3.4.3="" 1.3.4.4="" 1.3.4.5="" 1.3.4="" conflict:="" fast-logger="=2.1.5," rejecting:="" wai-extra-1.3.4.6="" wai-extra=""> fast-logger>=0.2 && <0 .4="" 1.3.0.1="" 1.3.0.2="" 1.3.0.3="" 1.3.0.4="" 1.3.0.5="" 1.3.0="" 1.3.1.1="" 1.3.1="" 1.3.2.1="" 1.3.2.2="" 1.3.2="" conflict:="" rejecting:="" wai-extra-1.3.2.3="" wai-extra="" wai="=1.4.1,"> wai>=1.3 && <1 .4="" 0.0.0.1="" 0.0.0.2="" 0.0.0="" 0.1.0="" 0.1.1="" 0.1.2.1="" 0.1.2="" 0.1.3.1="" 0.1.3="" 0.2.0="" 0.2.1="" 0.2.2.1="" 0.2.2.2="" 0.2.2="" 0.2.3="" 0.2.4.1="" 0.2.4.2="" 0.2.4="" 0.3.0="" 0.3.1="" 0.3.2.1="" 0.3.2="" 0.3.3="" 0.4.0.1="" 0.4.0.2="" 0.4.0.3="" 0.4.0="" 0.4.1.1="" 0.4.1.2="" 0.4.2="" 0.4.3="" 0.4.4="" 0.4.5.1="" 0.4.5.2="" 0.4.5="" 0.4.6="" 1.0.0.1="" 1.0.0="" 1.1.0.1="" 1.1.0="" 1.2.0.1="" 1.2.0.2="" 1.2.0.3="" 1.2.0.4="" 1.2.0.5="" 1.2.0="" conflict:="" rejecting:="" wai-extra-1.2.0.6="" yosog=""> wai-extra>=1.3 && <1 -="" .4="" app="" compile="" failed="" git="" haskell="" heroku.com:fierce-shore-6905.git="" master="" push="" rejected="" remote="" to=""> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:fierce-shore-6905.git'


(3/2追記)
上記のエラーは、ローカルでyesod init後にcabal installした際に、自分の環境の古い各種パッケージへの依存がYosog.cabalに記録され、Herokuで利用するビルドパック環境とあわないのが原因のようです。ローカルの環境をcabal updateで最新にして、cabal installした際に生成したYosog.cabalをコミットしてサーバーにデプロイしたところコンパイルは通るようになりました。
ですが残念なことに、heroku openしてもサーバーにはつながらず…。原因調査中です。


0 件のコメント:

コメントを投稿