Clojure 在本地服务器上运行服务器live所需的代码更改
我以前从未做过任何网络编程,所以我不知道我需要做什么才能让我编写的Clojure应用程序在live server上运行。我的页面的url是。这是我的Clojure代码Clojure 在本地服务器上运行服务器live所需的代码更改,clojure,httpserver,Clojure,Httpserver,我以前从未做过任何网络编程,所以我不知道我需要做什么才能让我编写的Clojure应用程序在live server上运行。我的页面的url是。这是我的Clojure代码 (ns startingclojure.core (:use (compojure handler[core :only (GET POST defroutes)]) [clojure.pprint]) (:require [net.cgrand.enlive-html :as en]
(ns startingclojure.core
(:use (compojure handler[core :only (GET POST defroutes)])
[clojure.pprint])
(:require [net.cgrand.enlive-html :as en]
[ring.util.response :as response]
[ring.adapter.jetty :as jetty]))
(defonce counter (atom 10000))
(defonce urls (atom {}))
( defn shorten
[url]
(let [id (swap! counter inc)
id (Long/toString id 36)]
(swap! urls assoc id url)
id))
(en/deftemplate homepage
(en/xml-resource "homepage.html")
[request]
[:#listing :li]
(en/clone-for [[id url] @urls]
[:a] (comp ;; comp composes any number of functions
(en/content (format "%s : %s" id, url))
(en/set-attr :href (str \/ id)))))
(defn redirect
[id]
(response/redirect (@urls id)))
(defroutes app*;; * ususally means implementation detail or lower level operation
(GET "/" request (homepage request))
(POST "/shorten" request
(let [id (shorten (-> request :params :url))]
(response/redirect "/")))
(GET "/:id" [id] (redirect id)))
(def app (compojure.handler/site app*))
这是html
<html>
<head>
<link type="text/css" rel="stylesheet" href="style.css"/>
</head>
<body>
<form method="POST" action="/shorten">
<input type="text" name="url"/>
<input type="submit" value="Shorten!"/>
</form>
<ul id="listing">
<li>
<a href="/shorturl">id :url</a>
</li>
</ul>
</body>
</html>
-
下面是我的实际问题
(def服务器(jetty/run jetty#'app{:port 8080:join?false})开始)
我不确定我是否已经提供了所有必要的信息,但我很乐意提供您可能需要的帮助我开始的任何信息。提前感谢。在生产箱上运行lein,甚至repl都不是一个好主意 您应该定义一个
-main
函数,如果在本地执行lein run
,该函数将创建并运行web服务器进程。然后,当您准备部署时,运行leinuberjar
创建一个包含整个应用程序及其所有依赖项的jar。一旦服务器上有了jar文件,就可以通过java-jar my app.jar
运行它。您可能需要一个脚本,该脚本还可以设置所有正确的java执行变量以及它应该运行的端口等(这些变量可以在命令行中提供,并作为字符串传递给-main)
如果应用程序需要解压某些文件,则需要提取jar(或至少提取jar的该部分),并确保应用程序进程可以在运行时找到它。jar是一个zip文件,可以通过命令行中的解压命令进行解压缩。如果您需要引用仍在jar中的资源进行读取,则应将对clojure.java.io.file
(或本机java文件
对象)的任何引用替换为clojure.java.io/resource
可能需要一段时间才能解决所有这些环境间的差异,但幸运的是,这些步骤中的每一个都可以在您细化它们时在本地进行测试