Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在开发基于compojure/ring的应用程序时,使用emacs/cider的正确方法是什么?_Emacs_Clojure_Leiningen_Ring_Compojure - Fatal编程技术网

在开发基于compojure/ring的应用程序时,使用emacs/cider的正确方法是什么?

在开发基于compojure/ring的应用程序时,使用emacs/cider的正确方法是什么?,emacs,clojure,leiningen,ring,compojure,Emacs,Clojure,Leiningen,Ring,Compojure,开发过程中使用emacs/cider的正确工作流程/途径是什么 基于compojure/ring的clojure应用程序 我觉得我可以“附加”到我正在运行的compojure/ring流程, 更改代码,读取/更改数据,但我不明白如何正确操作? 正确的方法是什么 我做什么 lein new compojure my-project cd my-project lein ring server-headless 开发服务器现在运行。如果我更改项目中的文件,它们将自动重新加载。那很好。但我想要的是

开发过程中使用emacs/cider的正确工作流程/途径是什么 基于compojure/ring的clojure应用程序

我觉得我可以“附加”到我正在运行的compojure/ring流程, 更改代码,读取/更改数据,但我不明白如何正确操作? 正确的方法是什么

我做什么

lein new compojure my-project
cd my-project
lein ring server-headless
开发服务器现在运行。如果我更改项目中的文件,它们将自动重新加载。那很好。但我想要的是 例如,指向流程并更改其功能


我知道这是可能的,但我不知道怎么做。

我不知道正确与否,但我会投入2美分

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


我也见过其他人从REPL内部启动jetty,尽管我从未尝试过。

派对有点晚。但正如我刚刚处理同样的问题,并发现了这个悬而未决的问题。答案可在以下网址找到:


基本上,使用lein ring的插件版本0.9.2并添加到project.clj:nrepl{:start?true}上的:ring配置中,它可以工作

有两种主要的方法来实现您想要的功能。它们都不是特定于环形服务器的,甚至不是特定于Web服务器的,它们将应用于任何Clojure项目

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

与苹果酒一样,您可以使用
C-C-k
重新加载更改的文件,这将重新定义您更改的任何函数。还有更多的微调评估


M-x苹果酒插孔(或C-C M-j) 这将启动项目的流程,并将REPL连接到项目。这不会为您调用任何函数(CIDER不会这样做),但是您可以通过调用REPL中的相应函数轻松启动Web服务器。如果所讨论的函数是
-main
函数,则可以执行
M-x cider run
来调用它(如果愿意,可以将其绑定到键)


M-x苹果酒接头
同样,您可以像平常一样从终端启动Web服务器,然后调用
M-x cider connect
在其中打开一个REPL。(这是我以前做的)。

更具体一点:当您在Emacs中打开连接到正在运行的headless jetty/ring应用程序的REPL,并且您评估一个函数或重新评估整个缓冲区或加载一个文件时,这些评估将在正在运行的应用程序中直接可见。这个答案很有帮助,对于苹果酒连接,请确保使用nrepl选项运行。对于环,您需要此
:nrepl{:start?true:port 9000}