Skip to content
shunter1112 edited this page Aug 22, 2013 · 2 revisions

HerokuのCedarスタックはあらゆるタイプのClojureアプリケーションを実行することができます。

このドキュメントはClojureアプリケーションの検知と実行に関係する、Cedarスタックの一般的な振る舞いについて説明します。 アプリケーションのデプロイ方法の更なる詳細な説明を確認する場合は、以下をご覧ください :

アクティベーション

HerokuのClojureサポートは、アプリケーションがルートディレクトリの中にアプリケーションがproject.cljを持っているときだけ適応されます。

Mavenを使っているClojureアプリケーションも同様にデプロイすることができますが、Javaアプリケーションとして扱われます。そのため別のドキュメントの範囲のトピックになります。

project.cljの中で2から始まるように:min-lein-versionを指定しているプロジェクトはLeiningen 2.xが使用され (高く推奨されます)、その他の場合はLeiningen 1.7.1が使われます。

設定

デフォルトでLeiningen 1.7.1 が使われますが、もしあなたがproject.cljの中に:min-lein-version "2.0.0"がある場合(高く推奨されます)、 最新のリリースであるLeiningen 2.xが使用されます。

あなたのProcfileはあなたのアプリケーションを作るプロセスタイプが宣言されているべきです。 しばしば開発中には、Leiningenプロジェクトはlein run -m my.project.namespaceを使って起動されますが、 これはプロダクション環境では推奨されません。なぜなら、あなたのプロジェクトのプロセスに加えてLeiningenの実行を残すためです。 またこれは開発のために意図されたプロファイルを使う事になり、これはプロダクション環境でテストライブラリやテスト用の設定が動く事を許すことになります。

Uberjar

もしあなたのproject.clj:uberjar-name設定を含んでいる場合、lein uberjarがデプロイ中に実行されます。 もしこれをするならば、Procfileのエントリにはjavaの実行が含まれているべきです。

もしあなたの主要の名前空間が:gen-classを持っていない場合、clojure.mainをあなたのエントリポイントとして使用することができ、 あなたのアプリケーションの主要な名前空間を、Procfileの中で-m属性を使う事で指定する事が出来ます :

web: java $JVM_OPTS -cp target/myproject-standalone.jar clojure.main -m myproject.web

もしビルド中にだけ適応したいカスタム設定がある場合、:uberjarプロファイルの中にこれを置く事ができます。 これはリロードの問題になりうる開発環境でなく、プロダクション環境で事前コンパイラでコンパイルされたクラスを使用するのに便利です。

:::clojure
:profiles {:uberjar {:main myproject.web, :aot :all}}

heroku runのセッションの中でLeiningenが必要な場合は、都度場合によりダウンロードされます。

もし、ネイティブの依存ファイルを抜き取る:jvm-optsや、:java-agentsの様な、実行時に影響を与えるLeiningenの機能を使用する場合、Procfileのjavaの実行にこれらのことを含んでいることを確かにするための作業を、少し追加でする必要が出てきます。 これらの場合だと、代わりにLeiningenを実行時に使う事がシンプルになるでしょう。

実行時におけるLeiningen

あなたのProcfileの中にjavaの実行を直接置くかわりに、あなたはLeiningenにあなたのアプリケーションを実行させることができます。 もしこれをするならば、trampolinewith-profileタスクを使う事を忘れないでください。 Trampolineを使う事は、Leiningenにクラスパスとあなたのプロジェクトを実行するためのコードを計算させ、 with-profileが開発用のプロファイルを取り除いている間にLeiningenを終了させ、あなたのプロジェクトのJVMを実行します。

web: lein with-profile production trampoline run -m myapp.web

あなたのSlugの中にLeiningenを含める事は、Slugのサイズに約10MB加える事になり、あなたのアプリケーションの起動時間に1~2秒のオーバーヘッドを加えます。

ビルドの振る舞いの上書き

もしこれらのオプションのどれもあなたのやりたい事と違っていた場合、あなたのリポジトリの中の実行可能であるbin/buildスクリプトを確認できます。 これはLeiningenの設定のあとに、compileuberjarの代わりに実行されます。

JDKのバージョン

デフォルトではOpenJDKの1.6を使います。違うバージョンを使う場合は、 あなたのアプリケーション内にsystem.propertiesファイルをコミットすることができます。

$ echo "java.runtime.version=1.7" > system.properties
$ git add system.properties
$ git commit -m "JDK 7"

アドオン

デフォルトではどのアドオンも配備されません。もしあなたのアプリケーションにSQLデータベースが必要に成った場合は、 明示的に一つ加えてください :

:::term
$ heroku addons:add heroku-postgresql:crane
Clone this wiki locally