lein环服务器与nrepl不尊敬cider-nrepl [英] lein ring server with nrepl doesn't honour cider-nrepl

查看:317
本文介绍了lein环服务器与nrepl不尊敬cider-nrepl的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我用 lein ring server 启动我当前的项目并尝试通过cider从Emacs连接到它时,我收到以下警告:

 ; CIDER 0.8.2(Java 1.7.0_51,Clojure 1.6.0,nREPL 0.2.6)
警告:不支持以下必需的nREPL操作:
apropos classpath complete eldoc info inspect-start inspect-refresh check-pop inspect-push inspect-reset macroexpand ns-list ns-vars resource stacktrace toggle-trace-var toggle-trace-ns undef
请安装(或更新)cider-nrepl 0.8.2并重新启动CIDER
user>但是,我有一个依赖关系 [cider / cider-nrepl] 0.8.2] 在我的 project.clj 。这是工作很好,当我运行 lein repl ,然后我可以连接刚从cider:

 ; CIDER 0.8.2(Java 1.7.0_51,Clojure 1.6.0,nREPL 0.2.6)
swedishchef.handler>

我可以看到我从leiningen wrt收到两条不同的消息。 nREPL,取决于我如何开始:

  [sugarcube-> swedishchef] lein环服务器
请参阅https: /github.com/technomancy/leiningen/wiki/Repeatability)
在端口44231上启动nREPL服务器

这是与工作cider-nrepl连接的输出:

  [sugarcube-> swedishchef] lein repl 
查看https://github.com/technomancy/leiningen/wiki/Repeatability)
nREPL服务器在主机127.0.0.1上的端口38024上启动 - nrepl://127.0.0.1:38024
REPL-y 0.3.5,nREPL 0.2.6

查看 lein deps的输出:tree 我没有看到任何问题。所以,我的第一个问题是,这是否应该工作,即如果 cider-nrepl 应该覆盖 lein ring wrt。到nrepl启动?

解决方案

使用最新 lein-ring 插件版本0.9.2,并将:repl-options 添加:nrepl-middleware $ c> in your project.clj



例如,我通过 lein new compojure-app my-app 。然后,我通过在〜/ .lein / profiles.clj ex中创建一个空的leiningen配置文件来测试它。 {:yolo {}} ,并通过 lein with-profile yolo,dev环服务器启动环服务器。

 (defproject my-app0.1.0-SNAPSHOT
:descriptionFIXME:write description
: urlhttp://example.com/FIXME
:dependencies [[org.clojure / clojure1.6.0]
[compojure1.1.6]
[hiccup 1.0.5]
[ring-server0.3.1]
[cider / cider-nrepl0.8.2]]
:plugins [[lein-ring 2]]
:ring {:handler my-app.handler / app
:init my-app.handler / init
:destroy my-app.handler / destroy
:nrepl {:start?true}}
:repl-options {:nrepl-middleware
[cider.nrepl.middleware.apropos / wrap-apropos
cider.nrepl.middleware.classpath / wrap-classpath
cider.nrepl.middleware.complete / wrap-complete
cider.nrepl.middleware.info/wrap-info
cider.nrepl.middleware.inspect / wrap-inspect
cider.nrepl.middleware.macroexpand / wrap-macroexpand
cider.nrepl.middleware.ns / wrap-ns
cider.nrepl.middleware.resource / wrap-resource
cider.nrepl .middleware.stacktrace / wrap-stacktrace
cider.nrepl.middleware.test / wrap-test
cider.nrepl.middleware.trace / wrap-trace
cider.nrepl.middleware.undef / wrap-undef]}
:profiles
{:uberjar {:aot:all}
:production
{:ring
{:open- false,:stacktraces? false,:auto-reload? false}}
:dev
{:dependencies [[ring-mock0.1.5] [ring / ring-devel1.3.1]]}})


When I start up my current project with lein ring server and try to connect to it from Emacs via cider, I get the following warning:

; CIDER 0.8.2 (Java 1.7.0_51, Clojure 1.6.0, nREPL 0.2.6)
WARNING: The following required nREPL ops are not supported: 
apropos classpath complete eldoc info inspect-start inspect-refresh inspect-pop inspect-push inspect-reset macroexpand ns-list ns-vars resource stacktrace toggle-trace-var toggle-trace-ns undef
Please, install (or update) cider-nrepl 0.8.2 and restart CIDER
user> 

However, I do have a dependency for [cider/cider-nrepl "0.8.2"] in my project.clj. This is working just fine when I run lein repl and to which I can then connect just fine from cider:

; CIDER 0.8.2 (Java 1.7.0_51, Clojure 1.6.0, nREPL 0.2.6)
swedishchef.handler>

I can see that I get two different messages from leiningen wrt. nREPL, depending on how I start:

[sugarcube->swedishchef]lein ring server
See https://github.com/technomancy/leiningen/wiki/Repeatability)
Started nREPL server on port 44231

This is the output with the working cider-nrepl connection:

[sugarcube->swedishchef]lein repl
See https://github.com/technomancy/leiningen/wiki/Repeatability)
nREPL server started on port 38024 on host 127.0.0.1 - nrepl://127.0.0.1:38024
REPL-y 0.3.5, nREPL 0.2.6

Looking at the output of lein deps :tree I don't see any problems. So, my first question is whether this supposed to work, i.e., if cider-nrepl should override lein rings behavior wrt. to nrepl startup? If so, could somebody give some advice for further troubleshooting?

解决方案

Use latest lein-ring plugin version 0.9.2 and add :nrepl-middleware containing vector of nrepl-middlewares to :repl-options in your project.clj

For example, I create the project by lein new compojure-app my-app. Then, I tested it by creating a empty leiningen profile in ~/.lein/profiles.clj ex. {:yolo {}} and starting ring server by lein with-profile yolo,dev ring server.

(defproject my-app "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :dependencies [[org.clojure/clojure "1.6.0"]
                 [compojure "1.1.6"]
                 [hiccup "1.0.5"]
                 [ring-server "0.3.1"]
                 [cider/cider-nrepl "0.8.2"]]
  :plugins [[lein-ring "0.9.2"]]
  :ring {:handler my-app.handler/app
         :init my-app.handler/init
         :destroy my-app.handler/destroy
         :nrepl {:start? true}}
  :repl-options {:nrepl-middleware
                 [cider.nrepl.middleware.apropos/wrap-apropos
                  cider.nrepl.middleware.classpath/wrap-classpath
                  cider.nrepl.middleware.complete/wrap-complete
                  cider.nrepl.middleware.info/wrap-info
                  cider.nrepl.middleware.inspect/wrap-inspect
                  cider.nrepl.middleware.macroexpand/wrap-macroexpand
                  cider.nrepl.middleware.ns/wrap-ns
                  cider.nrepl.middleware.resource/wrap-resource
                  cider.nrepl.middleware.stacktrace/wrap-stacktrace
                  cider.nrepl.middleware.test/wrap-test
                  cider.nrepl.middleware.trace/wrap-trace
                  cider.nrepl.middleware.undef/wrap-undef]}
  :profiles
  {:uberjar {:aot :all}
   :production
   {:ring
    {:open-browser? false, :stacktraces? false, :auto-reload? false}}
   :dev
   {:dependencies [[ring-mock "0.1.5"] [ring/ring-devel "1.3.1"]]}})

这篇关于lein环服务器与nrepl不尊敬cider-nrepl的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆