MacでHerokuにYesodを(Herokuに公開編)
さていよいよYesodアプリをHerokuに公開します。
ただ、当然ながらHerokuにアカウントが必要なので、作業はそこからスタートです。
相変わらずUbuntu on VirtualBoxで作業します。
Heroku Toolbeltをインストール
このツールをインストールすると、herokuコマンドを通してHerokuのリモートサイトを操作出来るようになります。
このツールをUbuntu on VirtualBoxにインストールしないといけないのですが、詳しい手順をメモし忘れたの紹介出来ません・・・
結構面倒だったので、自分としてもメモを取っておかなかったことを後悔しています。絶対、将来また同じことをやろうとして同じところにはまると思う。
ちなみにMacの場合、Heroku Dev Center内のGetting Started with Herokuの「Step 2: Install the Heroku Toolbelt」からダウンロード出来ます。
Gitをインストール
Herokuは先のHeroku Toolbeltに加えてgitを使います。例えば実行ファイルのアップロードはgitで行います。
sudo apt-get install git-core
Macの場合は
sudo port install git-core
で。
gitは今回初めて触りましたが、便利ですね。Subversionから鞍替えしようと思います。
gitリポジトリとHerokuスタックの作成
Herokuに実行ファイルをアップロードするのはgitで行います。そのため、gitのローカルリポジトリを作っておく必要があります。
Yesodアプリのルートディレクトリで作業します。
まずはgitローカルリポジトリの作成
git init
次にHerokuにスタックを作成。
heroku create --stack cedar
これでgitのリモートにherokuのサイトが登録されます。
Yesodアプリのビルド
cabal install
Yesod0.9.4からは、-fproductionフラグは不要になっているので、このコマンド一発でビルド出来ます。
これでdist/build/first-heroku/に実行ファイルfirst-herokuが出来ます。
Procfileを移動して編集
deploy/ProcfileはHerokuにデプロイするときに必要なファイルで、ルートディレクトリに置いておく必要があります。
mv deploy/Procfile .
また、Yesod0.9.4でビルドすると作成される実行ファイルを起動するには、引数が1つ必要なのですが、scaffoldが生成してくれるProcfileにはこれが反映されていません。なのでProcfileを編集する必要があります。
編集前
web: ./dist/build/first-heroku/first-heroku -p $PORT
編集後
web: ./dist/build/first-heroku/first-heroku production -p $PORT
package.jsonを作成
よく分かりませんがpackage.jsonを作らないとHerokuで動かないらしいです。
echo '{ "name": "first-yesod", "version": "0.0.1", "dependencies": {} }' >> package.json
Herokuにアップロード
Herokuにアップロードするにはgitを使います。
まずはローカルリポジトリに今までに作ったファイルをコミット。
git add .
git commit -m "master"
さていよいよHerokuにアップロード!
ブランチを切った方がいい、と書いてあるサイトも多いしProcfileのコメントにもそう書いてありますが、Ubunto on VirtualBoxがそもそもアップロード専用なので、ここではブランチは切りません。
git push heroku master:master
試してみる
アップロードしたアプリを試してみましょう!
heroku open
おおおおおおおおおおおおおお!!!!
表示された!!!!
これはすごい!!!!
目に見えておかしいところもあるのですが、Yesodの領域で解決出来る気がします。
最大の難関と思われたビルド&デプロイをクリア出来たのは大きい!
今回のソース、一応githubにアップしておきます。
http://github.com/jabaraster/first-heroku