-
Notifications
You must be signed in to change notification settings - Fork 9
Clojure support
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の実行を残すためです。
またこれは開発のために意図されたプロファイルを使う事になり、これはプロダクション環境でテストライブラリやテスト用の設定が動く事を許すことになります。
もしあなたの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を実行時に使う事がシンプルになるでしょう。
あなたのProcfileの中にjava
の実行を直接置くかわりに、あなたはLeiningenにあなたのアプリケーションを実行させることができます。
もしこれをするならば、trampoline
とwith-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の設定のあとに、compile
やuberjar
の代わりに実行されます。
デフォルトでは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