Clojure:如何为服务器设置特定的 url?
Clojure: How can I set up a specific url for a server?
我是 clojure 的新手,我正在尝试使用它来托管具有特定 url 的服务器。
在网上做了一些调查,我得到了如下信息。
(ns rest-demo.core
(:require [org.httpkit.server :as server]
[compojure.core :refer :all]
[compojure.route :as route]
[ring.middleware.defaults :refer :all]
[clojure.string :as str]
[clojure.data.json :as json])
(:gen-class))
(defn hello-name
[req]
{:status 200
:headers {"Content-Type" "text/html"}
:body (str "Hello " (:name (:params req)))})
(defroutes app-routes
(GET "/hello" [] hello-name)
(route/not-found "Error, page not found!"))
(defn -main
"This is our main entry point"
[& args]
(let [port (Integer/parseInt (or (System/getenv "PORT") "3000"))]
; Run the server with Ring.defaults middleware
(server/run-server (wrap-defaults #'app-routes site-defaults) {:port port})))
运行 lein run
并访问 127.0.0.1:3000/hello
我可以访问 API.
我将如何使用我选择的 url 来托管它?
提前致谢!
一个URL*由几个部分组成,其中最重要的两个是
- 托管它的计算机的主机名
- 特定页面的路径。
看起来你已经处理了#2。
要解决#1,您可以采用两种方法:
- 在 Internet 上找到一个好地方来托管您的程序。像 Heroku
- 想办法在 Internet 上为您的笔记本电脑命名。像 https://portmap.io/
当你解决了这些问题后,我们就回到这个问题的编程部分。默认情况下,httpskit 将使用任何主机名回答请求。所以你不需要做任何事情并且可以接受默认值。
'*' 这里有 URL 和 URI 之间的区别,我在掩饰它们
在您选择的特定 URL 上托管它基本上意味着,您希望可以在该特定 URL 上访问您的 Web 应用程序。为此,您首先必须从 ICANN 认可的域名注册商(如 Namecheap、domain.com、Godaddy)付费购买域名(例如 .com),然后将其配置为将其重定向到服务器你从哪里晒太阳的服务。在这种情况下,它会是您机器的 public IP 地址(或者如 @Arthur_Ulfeldt 提到的那样使用端口映射或 ngrok 之类的东西)。
当然不推荐这样做,因为您的机器可能没有良好的正常运行时间或可靠的连接。这就是您将其托管在云解决方案上的原因。无论是像 Heroku 这样的东西(一个 PaaS,这对你来说是最好的选择,因为它真的很容易为 Clojure 部署)或者来自任何提供商的一些计算实例(AWS ec2 或 GCP 计算引擎或 Azure VM)只需在那里克隆你的应用程序, 运行 你的服务器在那里并将你的所有请求重定向到那里。
我是 clojure 的新手,我正在尝试使用它来托管具有特定 url 的服务器。
在网上做了一些调查,我得到了如下信息。
(ns rest-demo.core
(:require [org.httpkit.server :as server]
[compojure.core :refer :all]
[compojure.route :as route]
[ring.middleware.defaults :refer :all]
[clojure.string :as str]
[clojure.data.json :as json])
(:gen-class))
(defn hello-name
[req]
{:status 200
:headers {"Content-Type" "text/html"}
:body (str "Hello " (:name (:params req)))})
(defroutes app-routes
(GET "/hello" [] hello-name)
(route/not-found "Error, page not found!"))
(defn -main
"This is our main entry point"
[& args]
(let [port (Integer/parseInt (or (System/getenv "PORT") "3000"))]
; Run the server with Ring.defaults middleware
(server/run-server (wrap-defaults #'app-routes site-defaults) {:port port})))
运行 lein run
并访问 127.0.0.1:3000/hello
我可以访问 API.
我将如何使用我选择的 url 来托管它?
提前致谢!
一个URL*由几个部分组成,其中最重要的两个是
- 托管它的计算机的主机名
- 特定页面的路径。
看起来你已经处理了#2。 要解决#1,您可以采用两种方法:
- 在 Internet 上找到一个好地方来托管您的程序。像 Heroku
- 想办法在 Internet 上为您的笔记本电脑命名。像 https://portmap.io/
当你解决了这些问题后,我们就回到这个问题的编程部分。默认情况下,httpskit 将使用任何主机名回答请求。所以你不需要做任何事情并且可以接受默认值。
'*' 这里有 URL 和 URI 之间的区别,我在掩饰它们
在您选择的特定 URL 上托管它基本上意味着,您希望可以在该特定 URL 上访问您的 Web 应用程序。为此,您首先必须从 ICANN 认可的域名注册商(如 Namecheap、domain.com、Godaddy)付费购买域名(例如 .com),然后将其配置为将其重定向到服务器你从哪里晒太阳的服务。在这种情况下,它会是您机器的 public IP 地址(或者如 @Arthur_Ulfeldt 提到的那样使用端口映射或 ngrok 之类的东西)。
当然不推荐这样做,因为您的机器可能没有良好的正常运行时间或可靠的连接。这就是您将其托管在云解决方案上的原因。无论是像 Heroku 这样的东西(一个 PaaS,这对你来说是最好的选择,因为它真的很容易为 Clojure 部署)或者来自任何提供商的一些计算实例(AWS ec2 或 GCP 计算引擎或 Azure VM)只需在那里克隆你的应用程序, 运行 你的服务器在那里并将你的所有请求重定向到那里。