Clojure 在本地服务器上运行服务器live所需的代码更改

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]

我以前从未做过任何网络编程,所以我不知道我需要做什么才能让我编写的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]
            [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>

下面是我的实际问题

  • 如何让Clojure在服务器上执行。我一直在repel中加载此代码,并从
    (def服务器(jetty/run jetty#'app{:port 8080:join?false})开始)

  • 另外,查看此项目的正确方法是什么(即文件结构)。服务器上的文件结构只是 顶层:bin public_html 在公共场合,html是cgi bin index.html startingclojure(我的应用程序,来自教程)

  • 在索引中,html是您在进入该页面并开始使用leiningen文件结构时看到的内容


    我不确定我是否已经提供了所有必要的信息,但我很乐意提供您可能需要的帮助我开始的任何信息。提前感谢。

    在生产箱上运行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

    可能需要一段时间才能解决所有这些环境间的差异,但幸运的是,这些步骤中的每一个都可以在您细化它们时在本地进行测试