桟橋ハンドラーを直接呼び出していたとき、次のようなコンフィギュレーターを渡すことができました。
(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)))}))
投稿時にFULLHEADエラーが発生し続けたため、これを行う必要がありました。ここで、コマンドラインから呼び出される> leinringserverを直接使用するようにリファクタリングしました。
> lein ring server
これは、私のproject.cljで指定されたいくつかの構成を使用します。
:ring {:handler caribou.api.core/app
:servlet-name "caribou-api"
:init caribou.api.core/init
:port 33443}
これはうまく機能しますが、今度はFULLHEADの問題が再び発生します。そこで私はそこにコンフィギュレーターを追加しようとしました:
: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:FULLHEADエラーが発生します。何か案は?ありがとう!