2012-06-19 13 views
6

Olası Çoğalt dağıtmak yürütülüyor: Basit bir api inşa etmek, compojure ile Clojure halka ortakatmanını kullanıyorum
How to run an arbitrary startup function in a ring project?halka/compjure uygulama başlangıçta bir işlev sonra

. Uygulamayı sıklıkla bir savaş olarak dağıtıyorum.

Bu harika çalışıyor, ancak uygulama başladığında tek bir başlatma kodu çalıştırmanın yollarını arıyorum. Ben "lein ring server" çalıştırdığımda, sadece iyi çalışır - ancak, bir savaş olarak konuşlandırıldığında sadece ilk istek sunucuya (yani tembel) vurduğunda çalışır gibi görünür. Tembel olmamanın bir yolu var mı (AOT kullanmadan) - ya da ring middleware yaşam döngüsüne girmenin daha iyi bir yolu var mı?

+0

Kanonik Bunu yapmak için

, başlangıçta ve/veya kapatma sırasında aradığınız dilek fonksiyonları ile bir dosya oluşturmak Burada cevap: http://stackoverflow.com/questions/13978623/how-to-run-an-arbitrary-startup-function-in-a-ring-project –

cevap

2

Bence arıyorsun: lein-ring eklentisinde init param. https://github.com/weavejester/lein-ring kopyalanmış:

:init - A function to be called once before your handler starts. It should take no 
arguments. If you've compiled your Ring application into a war-file, this function will 
be called when your handler servlet is first initialized. 
+0

"lein ring server" çalıştırırken çalışır ve Ancak, bir savaş olarak konuşlandırıldığında, bu işlev hiç çağrılmaz. –

+1

Bu hile şuydu: init işlevinin kendisi * projede * olmaması * –

1

A ServletContextListener uygulama ihtiyaçlarınızı hizmet verecek. Kendinizi :gen-class ile uygulamaktan hoşlanmıyorsanız, ring-java-servlet projesindeki sunucu yardımcı programlarını kullanabilirsiniz.

(ns my.project.init 
    (:require [org.lpetit.ring.servlet.util :as util])) 

(defn on-startup [context] 
    (do-stuff (util/context-params context))) 

(defn on-shutdown [context] 
    (do-other-stuff (util/context-params context))) 

Daha sonra aşağıdaki web.xml ayarlarla üzerinden webapp içine bu kanca:

<context-param> 
    <param-name>context-init</param-name> 
    <param-value>my.project.init/on-startup</param-value> 
</context-param> 
<context-param> 
    <param-name>context-destroy</param-name> 
    <param-value>my.project.init/on-shutdown</param-value> 
</context-param> 
<listener> 
    <listener-class>org.lpetit.ring.servlet.RingServletContextListener</listener-class> 
</listener> 
İlgili konular