2013-10-08 5 views
6

Sto giocando con Clojure/ClojureScript e sto scrivendo un'applicazione web. Va tutto bene mentre sto usando ring come server di sviluppo.Distribuzione dell'applicazione Clojure/Clojurescript in produzione

La domanda è: quale contenitore dovrei usare per la produzione? Dovrei usare anche l'anello per la produzione? Dovrei usare Tomcat? Esiste un modo consigliato per distribuire un'applicazione Clojure? Puoi indicarmi qualche documentazione riguardante questo aspetto?

Grazie!

risposta

9

Non c'è nulla di intrinsecamente diverso nella distribuzione di un servlet Java che è stato scritto in Java rispetto a Clojure e tutte le librerie e framework Clojure producono servlet compatibili in modo da avere molte opzioni di implementazione.

Utilizziamo netty per eseguire la nostra applicazione web basata su anello con grande efficacia nella produzione semplicemente eseguendo "lein run" da un servizio di sistema. Molti altri scelgono di usare lein uberwar per produrre un file war e ospitarlo su tomcat. Il meccanismo di hosting specifico sembra meno rilevante del processo di distribuzione. Tutti i file JavaScript sono forniti da un CDN. Immutant è anche una scelta divertente e molto Clojure con una forte sensazione "enterprisy".

Ciò che mi colpisce di più è la creazione di una build ripetibile, compresa la distribuzione. Pallet è un ottimo modo per andare anche se ha un po 'di una curva di apprendimento.

6

Ci sono alcune opzioni.

Il primo è semplice: Heroku. Hanno un livello gratuito che è ampio per l'implementazione e il test. Non approfondirò su questo, ma ho deciso di non usare più Heroku.

Un'altra opzione comune è Amazon AWS. Raccolgo la maggior parte delle app su AWS: lein-beanstalk [scusate, nessuna citazione qui]. Lein-beanstalk è uscito da un bel po 'e sembra essere ben mantenuto. È anche gestito dalla stessa persona che mantiene Compojure.

Io uso un VPS. Ho configurato Linux con Nginx e distribuito con git. Quindi, in pratica, il mio flusso è creare il sito, compilare lein uberjar, quindi distribuire. So che alcune persone possono utilizzare la partizione "lien ring server" di leiningen e utilizzare molte altre configurazioni, come Maven, Tomcat, l'implementazione con Vagrant, ecc., Ma eseguo semplicemente java -jar myApp-xxxxx sul server e funziona benissimo.

Per quanto riguarda la documentazione, sembra esserci una carenza di documentazione sulla distribuzione di Clojure in particolare. È come se dovessi sbattere la testa contro il muro e capirlo se vuoi fare il percorso VPS la prima volta che lo fai. Ho scoperto che quasi nessuno dei miei problemi riguardava specificamente Clojure.

4

In fase di sviluppo che uso:

lein ring server 

: quindi per compilare in un file di guerra che uso:

lein ring uberwar 

: e basta semplicemente inserire il file jar risultante nella directory Webapps e funziona bene. Io uso Jetty a proposito