Open browser to web server in dev mode

This commit is contained in:
James Reeves 2012-02-11 22:01:37 +00:00
parent 2bf33a33a6
commit 424a731040
3 changed files with 33 additions and 3 deletions

View file

@ -10,3 +10,9 @@
(or (:port options)
(-?> (*env* "PORT") Integer.)
(range 3000 3010)))
(defn open-browser?
"True if a browser should be opened to view the web server. By default
a browser is opened unless the LEIN_NO_DEV environment variable is set."
[options]
(:open-browser? options (not (*env* "LEIN_NO_DEV"))))

View file

@ -1,7 +1,8 @@
(ns ring.server.standalone
"Functions to start a standalone Ring server."
(:use ring.adapter.jetty
ring.server.options))
ring.server.options
[clojure.java.browse :only (browse-url)]))
(defn- try-port
"Try running a server under one port or a list of ports. If a list of ports
@ -15,6 +16,25 @@
(try-port port run-server)
(throw ex))))))
(defn- server-port
"Get the port the server is listening on."
[server]
(-> (.getConnectors server)
(first)
(.getPort)))
(defn- server-host
"Get the host the server is bound to."
[server]
(-> (.getConnectors server)
(first)
(.getHost)
(or "localhost")))
(defn- open-browser-to [server]
(browse-url
(str "http://" (server-host server) ":" (server-port server))))
(defmacro ^:private in-thread
"Execute the body in a new thread and return the Thread object."
[& body]
@ -41,5 +61,9 @@
(let [options (merge {:port port} options)
server (run-jetty handler options)
thread (add-destroy-hook server destroy)]
(if join? (.join thread))
(println "Started server on port" (server-port server))
(if (open-browser? options)
(open-browser-to server))
(if join?
(.join thread))
server)))))

View file

@ -13,7 +13,7 @@
(defn test-server [& [{:as options}]]
(let [handler (constantly (response "Hello World"))]
(serve handler (merge {:join? false} options))))
(serve handler (merge {:join? false, :open-browser? false} options))))
(defn is-server-running-on-port [port]
(let [resp (http/get (str "http://localhost:" port)