在开发基于组件/环的应用程序时使用emacs / cider的正确方法是什么?

问题描述 投票:8回答:3

在开发基于组件/环的clojure应用程序时,emacs / cider的正确工作流程/使用途径是什么?

我觉得我可以“附加”到我正在运行的compojure / ring-process,更改其代码,读取/更改其数据,但我无法理解我该如何做到这一点?什么是正确的方法?

我所做的?

lein new compojure my-project
cd my-project
lein ring server-headless

开发服务器现在运行。如果我更改项目中的文件,它们将自动重新加载。那很好。但我想要的是,我直接附加到流程并更改其功能,例如。

我明白这是可能的,但我无法理解。

emacs clojure leiningen ring compojure
3个回答
2
投票

我不知道正确但我会投入2美分。

我使用immutant启动我的ring项目,它在指定的端口启动REPL。我用M-x cider开始苹果酒并连接到之前指定的端口。从那里我可以修改REPL中的内容。

我也看到其他人从REPL内部开始码头,虽然我从未尝试过这个。


1
投票

做你想做的事有两种主要方式。它们都不是特定于环服务器,甚至不是网络服务器,它们都适用于任何Clojure项目。

下面的两种方法都应该为您提供一个功能齐全的REPL,完全控制以重新定义正在运行的服务器中的功能,以及完整的CIDER功能(比如能够调试到服务器的Web请求)。

与CIDER一样,您可以使用C-c C-k重新加载已更改的文件,这将重新定义您已更改的任何功能。还有plenty of other keys用于更精细的评估。


M-x cider-jack-in (or C-c M-j)

作为documented on the manual,这将启动您的项目进程并将REPL连接到它。这不会为您调用任何函数(CIDER不会这样做),但您可以通过调用REPL中的相应函数轻松启动您的Web服务器。如果有问题的函数是-main函数,你可以用M-x cider-run来调用它(如果你愿意,可以将它绑定到一个键)。


M-x cider-connect

同样作为documented on the manual,您可以像往常一样从终端启动您的网络服务器,然后调用M-x cider-connect在其中打开REPL。 (这是我以前做过的一段时间)。


0
投票

派对有点晚了。但正如我刚刚处理同样的问题并发现这个未解决的问题。答案可以在:lein ring server with nrepl doesn't honour cider-nrepl找到

基本上,使用lein-ring的插件版本0.9.2并添加到project.clj上的:ring配置:nrepl {:start?是的,它的确有效

© www.soinside.com 2019 - 2024. All rights reserved.