2013-04-30 23 views
5

mongerを使用して、ClojureのシンプルなアプリケーションからMongoDbのデータをフェッチして保存しています。私は強力なRuby on Railsのバックグラウンドを持っているので、環境(開発、テスト、制作)ごとのデータベース設定に精通しています。私はClojureで何か似たようなことをしたい。コードに環境を追加するにはどうすればよいですか?私はClojure-wayでデータとしてコードを作成し、yamlファイルは使用しません。それが何か変わるなら私はライニンゲンを使っています。環境ごとのClojureデータベース設定

答えて

5

私が作成したサンプルWebアプリclj-boilerplateをご覧ください。

あり、それは箱から出して環境を理解し、例の環境ファイルはhereを見ることができる方法についてのREADMEでの情報です - しかし、それはこのようなものになります。

(def config 
    (let [env (or (System/getenv "ENVIRONMENT") "development")] 
    ((keyword env) 
     {:development 
     {:database-url "postgres://lborges:@localhost/clj-boilerplate"} 
     :test 
     {:database-url "postgres://lborges:@localhost/clj-boilerplate-test" 
     :production 
     {:database-url (System/getenv "DATABASE_URL")}}))) 
このアプローチを進化以来、私が持っている

が、これをあなたを始めなければなりません。

これが役に立ちます。

8

Leiningen profiles機能を使用できます。

:profiles {:dev {:resource-paths ["resource-dev"]} 
      :prod {:resource-paths ["resource-prod"]}} 

今すぐ2つのディレクトリresource-devresource-prodを作成し、定義していますそれらの両方でconfig.cljファイルを作成し、あなたのプロファイルを定義します(DEVとPRODを必要とするほとんどの場合)あなたのproject.cljで

設定を保存するためのマップ。以下のような何か:

(ns myapp.config) 
(def config {:database "dev"}) 

そして、アプリのコードでは、あなたが(一度だけ)設定ファイルをロードするために、スニペットの下に使用し、コンフィグマップにアクセスすることができます。

(use 'clojure.java.io) 
(def config (delay (load-file (.getFile (resource "config.clj"))))) 
(defn get-config [] 
    @(force config)) 

今あなたがアクセスするget-config機能を使用することができますconfigマップ

+0

正しい設定を読み込むためにどの環境が実行されているかをアプリはどのように認識していますか? – Lee

+1

あなたは特定のプロファイルでアプリケーションを実行します: 'lein with-profile dev run' – Ankur

+0

そして、Herokuのような場所に展開して、lein with-profileを使うことはできません(私は思うが、5日間のClojure私のベルトの下に...)。また、run use "dev"などのデフォルトを設定することができますか?別の場所で指定されていない限り、テストは "test"を使用しますか? – Lee

0

はConfijulate(!個人的なプロジェクトのためのプラグイン)を使用して見ることもできます。:

https://github.com/bbbates/confijulate

それはあなたの環境に固有の設定マップを定義し、JVMのシステムプロパティを経由して使用するかを指定することができます。