请分享您的想法,参加2024 Clojure状态调查!

欢迎!请查看关于页面,了解更多关于如何使用本站的信息。

0

编辑

我正在设置一个返回JSON的服务,得益于Ring, Compojure和Jetty。我遇到的问题是我想要使用Nginx作为反向代理时。

(def wrapped-handler
  ;; Handler middlewares
  (-> all-routes
      (wrap-defaults (assoc-in site-defaults [:security :anti-forgery] false))
      wrap-params
      wrap-session
      ))

我收到的消息是

java.lang.NullPointerException
        at ring.adapter.jetty$proxy_handler$fn__6990.invoke(jetty.clj:26)
        at ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle(Unknown Source)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
        at org.eclipse.jetty.server.Server.handle(Server.java:503)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:364)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
        at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
        at java.base/java.lang.Thread.run(Thread.java:834)

但如果添加wrap-reload一切都会正常。

(def wrapped-handler
  ;; Handler middlewares
  (-> all-routes
      (wrap-defaults (assoc-in site-defaults [:security :anti-forgery] false))
      wrap-params
      wrap-session
      (#(if (config :debug) (wrap-reload %)))
      ))

我的Nginx配置如下。

server {        

        server_name domain.com;

        location / {
            proxy_pass https://127.0.0.1:9000/;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_redirect  off;
        }
}

在生产环境中留下wrap-reload是否安全?
我留下了什么呢?

提前感谢大家。

1 答案

0

仅凭这些信息很难判断。在像Clojurians Slack这样的交互式环境中调试此类问题更容易,那里的人们可以向您寻求更多信息,并要求您实时尝试事情。

https://clojurians.slack.com -- 自助注册: http://clojurians.net

我不得不说,您绝对不希望在生产环境中运行wrap-reload

问题已解决,感谢建议。

我遇到了以下情况

(#(if (config :debug) (wrap-reload %)))

这会导致nil,并中断执行。解决方案是

(#(if (config :debug) (wrap-reload %) %))

或者使用cond->

(cond-> (config :debug) wrap-reload)))
嗯,当我第一次看这帖子时,并没有看到这个条件...

cond->非常适合这类事情(而且比尝试将匿名函数中线程化更容易阅读!)。
...