Sto utilizzando il monger per recuperare e salvare alcuni dati in MongoDb dalla mia semplice app Clojure. Ho un forte background di Ruby on Rails, quindi ho familiarità con le impostazioni del database per ambiente (sviluppo, test, produzione). Voglio avere qualcosa di simile in Clojure. Come posso aggiungere l'ambiente al mio codice? Voglio farlo in Clojure-way, codice come dati, senza file yaml. Sto usando Leiningen se cambia qualcosa.Impostazioni database Clojure per ambiente
risposta
Dai un'occhiata allo clj-boilerplate, un'app di esempio web che ho creato.
C'è informazioni nel README su come capisce ambienti fuori dalla scatola e un esempio di file ambiente può essere visto here - ma sembra qualcosa di simile:
(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")}})))
allora ho sviluppato questo approccio, ma questo dovrebbe iniziare.
Spero che questo aiuti.
È possibile utilizzare la funzione Leiningen profiles.
Nei tuoi project.clj definire i profili (maggior parte dei casi è necessario dev e prod)
:profiles {:dev {:resource-paths ["resource-dev"]}
:prod {:resource-paths ["resource-prod"]}}
Ora creare 2 directory resource-dev
e resource-prod
e creare il file config.clj in ciascuno di essi che avrà definire un mappa per memorizzare la configurazione. Qualcosa di simile:
(ns myapp.config)
(def config {:database "dev"})
Poi nel codice dell'app per caricare il file di configurazione è possibile utilizzare sotto frammento (una sola volta) e accedere alla mappa config:
(use 'clojure.java.io)
(def config (delay (load-file (.getFile (resource "config.clj")))))
(defn get-config []
@(force config))
Ora è possibile utilizzare get-config
funzione per l'accesso la mappa di configurazione.
Dai un'occhiata alla utilizzando Confijulate (presa per un progetto personale!):
https://github.com/bbbates/confijulate
Esso consente di definire mappe di configurazione specifici dell'ambiente, e specificare quale usare tramite le proprietà del sistema JVM.
- 1. Database Clojure e NoSQL
- 2. Tabella database per le impostazioni globali
- 3. mantenere le impostazioni nel database
- 4. web.Config vs Tabella impostazioni database
- 5. Ambiente spedizione dipendente di protocolli/multimethods in clojure
- 6. Ottieni le impostazioni di ambiente nel controller di rotaie
- 7. Programmazione funzionale del database in Clojure
- 8. Errore di installazione del database Oracle: percorso ambiente
- 9. PHPStorm/Intellij - Esporta/Importa impostazioni database
- 10. Comando personalizzato per '\ begin {ambiente} ... \ end {ambiente}'
- 11. utilizzando Proprietà. Impostazioni per le impostazioni dell'applicazione
- 12. Impostazioni memoria JVM per specifiche2
- 13. Rails: inizializzatori per ambiente?
- 14. Standard per Clojure?
- 15. Impostazioni Vim per Erlang
- 16. Impostazioni globali per AsNoTracking()?
- 17. Dove inserire le impostazioni di connessione del database?
- 18. Configura Dancer dalle variabili di ambiente?
- 19. Come connettersi a un database MySQL da Clojure?
- 20. connettersi al database postgresql con impostazioni internazionali diverse
- 21. Progetto Django che utilizza impostazioni del database errate (vecchie)
- 22. Web.config di Azure per ambiente
- 23. Grails eseguire codice per-ambiente
- 24. Vagrant/Clojure/Emacs
- 25. Impostazioni del database di Heroku Iniezione - Come posso impostare il mio database di dev django?
- 26. DSL per sintesi immagine Clojure
- 27. Clojure tipo hint per Map.Entry
- 28. Impostazioni JVM ottimali per Cassandra
- 29. Impostazioni memoria Tomcat per webapp
- 30. Impostazioni Android ProGuard per Facebook
Come fa l'app a sapere quale ambiente è in esecuzione per caricare le impostazioni corrette? – Lee
Si esegue l'app con un profilo specifico: 'lein with-profile dev run' – Ankur
E quando si distribuisce da qualche parte come Heroku e non si può usare le lein con-profile (penso, ma ho 5 giorni di after hours Clojure sotto la mia cintura ...). Inoltre, puoi impostare i valori di default come run usa "dev" e i tuoi test usano "test" se non specificato altrove? – Lee