OpenShiftはHaskellに優しかったはずなのですが
この記事の通りカートリッジってのがあってそれを読み込んであげると例えばYesodならYesodの、SnapならSnapのプロジェクトひな形を一式全部作ってくれてgitリポジトリを持ってくるだけですぐに開発に入れました。便利ですね。
ところが!
エラー!!!!!なんでできへんねん!!!!!!殺しますよ!!!!!!!
Herokuに逃げる
というわけでOpenShiftには愛想を尽かしました。Herokuならきっと大丈夫。 Haskell WikiのWeb/Cloud - HaskellWikiにある
に従って最初のSnapアプリをデプロイしてみます。
まずは普通にSnapをインストールしてローカルで走らせてみる
というわけで、サブディレクトリを掘ってcabal sandboxを作ってsnapをインストールします。
$ mkdir firstsnap $ cd firstsnap/ $ ls $ cabal sandbox init Writing a default package environment file to .../firstsnap/cabal.sandbox.config Creating a new sandbox at .../firstsnap/.cabal-sandbox $ cabal install snap Resolving dependencies... Configuring HUnit-1.2.5.2... Building HUnit-1.2.5.2... Preprocessing library HUnit-1.2.5.2... ... Installed snap-0.14.0.5
いつもどおりです。snapを実行してsnapのひな形を作ってもらいます。実行ファイル自体はsandbox内のbinフォルダにあります。
$ cabal exec snap init barebones
これだけでOK。早速Webサーバを起動してみましょう。
$ cabal run -- -p 8080
でhttp://localhost:8080にアクセスしてみましょう。
いいね!
Herokuにデプロイする
ローカルにgitリポジトリを作ってコミットしましょう。
$ git init . $ vi .gitignore
で、.gitignoreを
$ cat .gitignore dist .cabal-sandbox log cabal.sandbox.config
みたいにしておきましょう。で、
$ git add * $ git status On branch master Initial commit Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: .ghci new file: .gitignore new file: Procfile new file: firstsnap.cabal new file: src/Main.hs $ git commit -m 'Initial commit'
これでコミットできました。
アプリケーションをherokuコマンドを使ってheroku上に作ります。名前はfirstsnap
としてますが、自由に変えられます。
$ heroku create firstsnap --stack=cedar-14 --buildpack https://github.com/begriffs/heroku-buildpack-ghc.git Creating firstsnap... done, stack is cedar-14 Buildpack set. Next release on firstsnap will use https://github.com/begriffs/heroku-buildpack-ghc.git. https://firstsnap.herokuapp.com/ | https://git.heroku.com/firstsnap.git Git remote heroku added
最終的にpushしてherokuにビルドさせます。
$ git push heroku master Counting objects: 8, done. Delta compression using up to 4 threads. Compressing objects: 100% (5/5), done. Writing objects: 100% (8/8), 1.26 KiB | 0 bytes/s, done. Total 8 (delta 0), reused 0 (delta 0) remote: Compressing source files... done. remote: Building source: ... remote: Verifying deploy.... done. To https://git.heroku.com/firstsnap.git * [new branch] master -> master
で、完了です。herokuのページからOpen App
して表示させてみましょう。
をクリックすると,
ページが表示されました!
最後にIntelliJに取り込む
普通に作ったディレクトリをIntelliJ上で開くとIntelliJ上で作業が続行できます。 ここから単純にpushするだけでもビルドできます。
pushには時間がかかります。アプリケーションのActivityページから進捗を確認できます。
UltimateのIntelliJなら組み込みのCloudサポートを使って進捗をIntelliJ上から確認できます。
Command+Shift+Aからクイックアクセスを出してedit config
と打つとEdit configurations...
にアクセスできます。
ここでクラウドデプロイをRunに割り当てることができます。
こんな感じです。すると
ボタンを押すと、
こんな感じで下のペインで進捗が確認できます。
まとめ
当然これだけではOpenShiftにデプロイしたものと違いがないので、これをさらにsnapっぽく拡張していきます。