簡體   English   中英

Compojure-如何從功能啟動服務器?

[英]Compojure - how to start server from a function?

我正在編寫一個玩具應用程序以了解Compojure,並將其用於數據庫支持的Web應用程序。 我知道,如果我使用lein ring uberjar編譯,則可以創建一個在登錄時自動啟動服務器的lein ring uberjar 現在,我想嘗試一個多功能的.jar文件,其想法是,在啟動jar時,我可以決定是否要執行數據庫管理或啟動服務器。

在我的core.clj中,我通過defroutes定義了一些路由,並在project.clj中的 :ring {:handler ...}下提供了這些路由。

我現在的問題是:如何從一個函數中啟動環形服務器,而依賴和代碼應盡可能少?

這個問題對開始從服務器的例子-main功能,但使用依賴我解決不了,一些隱匿性功能的pleothora沒有解釋,並且幾乎可以肯定是過時了兩年。

我在Compojure文檔和Wiki中找不到任何提示,也歡迎指向docs / tut的指針。

編輯:工作版本,來自schaueho的答案和鈴聲教程:

(ns playground.core
  (:require [ring.adapter.jetty :refer :all]
            [compojure.core :refer :all]
            [compojure.route :as route]))


(defroutes app-routes
  (GET "/" [query]
    (do (println "Server query:" query)
       "<p>Hello from compojure and ring</p>"))
  (route/resources "/")
  (route/not-found "<h1>404 - Page not found</h1>"))


(run-jetty app-routes {:port 8080 :join? false})

由於某種原因,在重新啟動REPL之前,調用run-jetty會給我ClassNotFoundExceptions具有完全相同的代碼。 我猜是一個受污染的名稱空間阻止了它的工作。

查看使用該碼頭的示例的戒指文檔的入門部分(就像lein ring一樣)。

您可以在-main函數內刪除對run-jetty的調用。 Compojure路由充當處理程序,因此您可以將其作為對run-jetty的調用的參數來刪除(如(jetty/run-jetty main-routes port)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM