Como posso fazer com que um WebApp de Clojure seja reimplementado automaticamente?
Pergunta
Estou desenvolvendo uma aplicação da web em Clojure e Vaadin, mas não consigo fazer o aplicativo para implantar automaticamente, para que apenas pressione a atualização no navegador. Alguma ideia?
Solução
Idealmente, você está usando um servidor REPL que permitirá carregar um novo código de clojure em seu aplicativo à vontade. Nesse caso, é apenas uma questão de alterar seu fluxo de trabalho para:
- Observe o problema
- vá para o editor de clojure
- Carregar novo código para executar o aplicativo
- Vá para o navegador, pressione a atualização.
Se você estiver usando o MAVEN, pode usar o Maven-Jetty-Plugin para recarregar automaticamente seu WebApp ao alterar seus arquivos de origem. Ver esta postagem para mais informações.
Outra opção é tentar continuamente recarregar seu código de clojure. Algo assim, talvez:
(defn reload
([] (reload #"."))
([ns-pattern]
(doseq [ns (all-ns)
:let [ns (.name ns)]
:when (re-seq ns-pattern (str ns))]
(require ns :reload))))
Em qualquer código que você tenha que inicie seu WebApp, ou em seu principal servlet init, etc., adicione algo como:
(future (loop []
(Thread/sleep 5000)
(reload) ;; optionally specify a regex to match only your app's namespaces here
(recur)))
Definitivamente não é algo que você deseja usar na produção. Eu prefiro usar um REPL remoto adequado em todos os casos, mas o acima o levará.