使用Emacs/Cider开发Compojure/Ring应用程序的正确方法是什么?

8

在开发基于compojure/ring的Clojure应用程序时,使用emacs/cider的正确工作流程/路径是什么?

我感觉我可以“连接”到正在运行的compojure/ring进程,更改其代码,读取/更改其数据,但我不知道如何正确地执行它。什么是正确的方法?

我该怎么做?

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

开发服务器已经运行。如果我更改项目中的文件,它们将自动重新加载。这很好。但是我想要的是直接附加到进程并更改其函数。我知道这是可能的,但我不明白如何做到。
3个回答

2

我不知道是否正确,但是我会提供我的两分钱。

我使用immutant启动我的环形项目,它会在指定的端口启动REPL。我使用M-x cider启动cider,并连接到之前指定的端口。然后我可以从REPL中修改东西。

我也看到其他人在REPL中启动jetty,但我从未尝试过这样做。


更具体地说:当您在Emacs中打开REPL并连接到正在运行的无头Jetty/Ring应用程序时,如果您评估一个函数或重新评估整个缓冲区或加载文件,则这些评估将直接显示在运行的应用程序中。 - schaueho

2
有两种主要的方法可以实现您想要的功能。它们都不是专门针对环形服务器或甚至 Web 服务器的,它们适用于任何 Clojure 项目。
以下两种方法都应该提供一个完全功能的 REPL,使您可以完全控制正在运行的服务器中重新定义函数,并具有完整的 CIDER 功能(例如能够调试向服务器发送的 Web 请求)。
通常情况下,使用 CIDER,您可以使用 C-c C-k 重新加载已更改的文件,这将重新定义您已更改的任何函数。还有很多其他键可用于进行更精细的评估。

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

根据手册文档,这会启动一个进程并连接到您的项目的REPL。这不会为您调用任何函数(CIDER不会这样做),但是您可以通过在REPL中调用相应的函数轻松启动Web服务器。如果涉及的函数是-main函数,则可以使用M-x cider-run来调用它(如果需要,将其绑定到键)。


M-x cider-connect

同时,正如手册所述,您可以像通常一样从终端启动您的Web服务器,然后调用M-x cider-connect在其中打开一个REPL。(这是我以前使用的方法)。


这个答案很有帮助,对于 cider-connect,请确保使用 nrepl 选项运行。对于 ring,您需要使用此 选项 :nrepl {:start? true :port 9000} - asiegf

0
有点晚了。但是我刚刚遇到相同的问题并发现这个未被回答的问题。答案可以在以下链接找到: lein ring server with nrepl doesn't honour cider-nrepl 基本上,使用版本为0.9.2的lein-ring插件,并且在project.clj的 :ring 配置中添加 :nrepl {:start? true} 就可以解决问题了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接