2012年10月13日土曜日

Clojureアプリのデプロイ: Heroku

はじめに

おはようございます。当ブログにアクセス頂き、ありがとうございます。
オーストラリアでの留学生活も終わりが見えて来た、たなけんです。
本エントリではClojureアプリケーションのHerokuへのデプロイについて記載します。

Webアプリケーションの作成

これまでいくつかClojureのWebアプリケーションを作成してきたのですが、Herokuで運用するために何か特別なライブラリが必要なのか等、不明な点が多かったので、Leiningenのプラグインであるheroku/lein-templateのテンプレート機能を利用して、Webアプリケーションの雛形を作成しました。
プラグインは~/.lein/profiles.cljに[heroku/lein-template "0.2.0"]と追記するだけで、インストールが完了します。(次回leinコマンド実行時に、必要なjarなどが自動的にダウンロードされます)
下記コマンドを実行し、Heroku上で動作するWebアプリケーションを生成します。
lein new heroku プロジェクト名

Webアプリケーションの構成

上記コマンドにより、下記の8ファイルが生成されます。

  • .gitignore
  • Procfile
  • README.md
  • web.clj
  • 500.html
  • 404.html
  • web_test.clj
  • project.clj

project.clj

ソースはlein-heroku/lein-templateで公開されているので、要約のみを記載します。
Webのライブラリとしてはオーソドックスにcompojureとringを利用しています。
しかしenvironとdrawbridgeという見慣れないライブラリも利用されていました。
そこで少し調べた所、environは設定情報を管理するライブラリでした(Javaでいう所のpropertyのような物でしょうか)。また、drawbridgeはリモートデバッグのためのライブラリでした。

web.clj

こちらもソースはGit上で公開されていますので、直接の引用は控えたいと思います。
environはHeroku上で設定された環境変数を読み込む為に使われているようです。
(REPLを使う際のユーザ認証。確かに、悪意あるユーザからプロセスを守らないといけないですね)その他、起動ポートや、セッションキーなどHerokuから割り当てられる変数を取得している様です。

Herokuアカウントの取得

さて、デプロイするアプリケーションを用意したところで、次はアカウントを取得します。
アカウントを取得する為には、Herokuのサイトからユーザ登録を選択肢、メールアドレスを入力するだけです。メールアドレスの入力後、確認のメールが送られてくるので、そのメール内のリンクから確認画面へ移動し、パスワードを設定します。
以上で、アカウントを取得する事ができます。

開発ツールのダウンロード、ログイン、アプリケーションの登録

Heroku ToolbeltというHerokuのCLIクライアントをダウンロードし、インストールします。インストール後、heroku loginでHerokuにログインし、アプリケーションルートに移動後、Heroku createでアプリケーションをHerokuに登録します。
あとはGitコマンドをパチパチ打ってソースをコミットし、コミットしたソースをheroku側と同期します。(コンソールでの操作は下記を参考下さい。)


Heroku Toolbeltの操作

プロセスの起動と終了

heroku psコマンドでプロセスの状態を確認する事ができます。
プロセスを起動する際は、下記のようにプロセス名とスケール数を指定します。
heroku ps:scale web=1
また、プロセスを終了する場合は、プロセス名.プロセス番号で終了するプロセスを指定します。
heroku ps:stop web.1

ログの確認

heroku logsコマンドでログを見る事ができます。初回起動時にLeiningenが依存関係の解消の為に必要なライブラリを取得しようとした形跡が見られます。(一度あるリポジトリへアクセスしたものの、そのリポジトリからは目的のライブラリを取得出来なかった際に出されるメッセージがログに残されていました。)
ログレベルの変更や、アプリケーションからのログ出力などは、アプリケーションの運用に必須な項目なので、変更方法等は知っておきたいところです。(調べてブログに書きます。。。)

環境変数の設定

heroku configコマンドで環境変数を設定します。ここで設定した環境変数のキーで、アプリケーション内から環境変数の値にアクセスする事が出来ます。

以上簡単に、Heroku Toolbeltを使ってみました。コマンド体系が直感的で理解しやすいといった感想を持ちました。作成した英単語学習アプリを公開したり、日々PCから実行しているルーチンのタスクをHeroku上のアプリからやらせるなど、いろいろとクラウド上でやってみたいことがあります。
HerokuはClojureを稼働させるのが簡単そうだったので、まず試してみましたが。今後データ量が大きくなりそうなアプリなどもありますので、他のホスティングサービスも試しつつ、ローカルのPCで走らせている日々のルーチンプログラムをクラウド上に移していこうと思います。

今回の作業は以上。最後までお読み頂き、ありがとうございました。
たなけん(作業時間1時間)



0 件のコメント:

コメントを投稿