clojure/ring/jetty :Я использую > сервер lein ring. Как настроить экземпляр причала, который будет создан?

Когда я вызывал обработчик причала напрямую, я мог передать конфигуратор вот так:

(def header-buffer-size 8388608)
(defn start [port]
  (ring/run-jetty
   (var app)
   {:port port
    :join? false
    :host "127.0.0.1"
    :configurator
    (fn [jetty]
      (doseq [connector (.getConnectors jetty)]
        (.setHeaderBufferSize connector header-buffer-size)))}))

I должен был сделать это, потому что я продолжал получать ошибку FULL HEAD при публикации. Теперь я провел рефакторинг, чтобы напрямую использовать > сервер lein ring, который вызывается из командной строки.

> lein ring server

Здесь используется некоторая конфигурация, указанная в моем проекте.clj.:

:ring {:handler caribou.api.core/app
       :servlet-name "caribou-api"
       :init caribou.api.core/init
       :port 33443}

Это прекрасно работает, но теперь я снова получаю ошибку FULL HEAD. Поэтому я попытался добавить туда конфигуратор:

:ring {:handler caribou.api.core/app
       :servlet-name "caribou-api"
       :init caribou.api.core/init
       :configurator
       (fn [jetty]
         (doseq [connector (.getConnectors jetty)]
           (.setHeaderBufferSize connector 8388608)))
       :port 33443})

И это не удалось с этой трассировкой стека:

Exception in thread "main" java.lang.ClassCastException: 
clojure.lang.PersistentList cannot be cast to clojure.lang.IFn
  at ring.adapter.jetty$run_jetty.invoke(jetty.clj:66)
  at ring.server.standalone$serve$fn__833.invoke(standalone.clj:78)
  at ring.server.standalone$try_port.invoke(standalone.clj:12)
  at ring.server.standalone$serve.doInvoke(standalone.clj:75)
  at clojure.lang.RestFn.invoke(RestFn.java:423)
  at ring.server.leiningen$serve.invoke(leiningen.clj:20)

Я решил, что это связано с размещением функции непосредственно на карте, поэтому я определил ее вне проекта (в caribou.api.core )и попытался сослаться на него, как и на остальные функции, определенные в другом месте :

;; in caribou/api/core.clj
(def header-buffer-size 8388608)
(defn full-head-avoidance
  [jetty]
  (doseq [connector (.getConnectors jetty)]
    (.setHeaderBufferSize connector header-buffer-size)))

;; in project.clj
:ring {:handler caribou.api.core/app
       :servlet-name "caribou-api"
       :init caribou.api.core/init
       :configurator caribou.api.core/full-head-avoidance
       :port 33443})

. Это раскручивает приложение, но я все равно получаю ошибку 413 :FULL HEAD при публикации. Любые идеи? Спасибо!

10
задан prismofeverything 23 April 2012 в 23:19
поделиться