Awesome
Luminus-Template
A Leiningen template for projects using Luminus.
The template initializes a base Luminus application.
Requirements
Luminus requires Leiningen version 2.5.3+
Usage
The Luminus template ships out of the box with your latest Leiningen. Run the following command to create a new Luminus project which uses the default profile template:
lein new luminus <your project name>
However, if you would like to attach further functionality to your template you can append profile hints for these extended features:
Profile | Category | Description | Compare |
---|---|---|---|
+aleph | server | adds the Aleph server | diff |
+http-kit | server | adds the fast HTTP Kit web server to the project | diff |
+immutant | server | adds the immutant web server to the project. Note: this project is no longer funded/maintained | diff |
+jetty | server | adds the jetty web server to the project | diff |
+undertow | server | adds the ring-undertow server. This is a default server. | diff |
+h2 | database | adds db.core namespace and H2 database dependencies | diff |
+postgres | database | adds db.core namespace and PostgreSQL database dependencies | diff |
+mysql | database | adds db.core namespace and MySQL/MariaDB database dependencies | diff |
+mongodb | database | adds support for MongoDB using the Monger library | diff |
+datomic | database | adds support for the Datomic database | diff |
+sqlite | database | adds support for the SQLite database | diff |
+xtdb | database | adds support for the XTDB database | diff |
+graphql | service API | adds GraphQL support using Lacinia | diff |
+swagger | service API | adds support for Swagger-UI | diff |
+service | service API | removes static assets and the layout, adds Swagger support | diff |
+cljs | ClojureScript | adds ClojureScript support to the project | diff |
+reagent | ClojureScript | adds ClojureScript support with Reagent to the project along with an example | diff |
+re-frame | ClojureScript | adds ClojureScript support with re-frame to the project along with an example | diff |
+kee-frame | ClojureScript | adds kee-frame to the project | diff |
+shadow-cljs | ClojureScript | adds shadow-cljs support to the project, replacing the default cljsbuild and figwheel setup | diff |
+boot | misc | causes the project to run with Boot instead of Leiningen | diff |
+auth | misc | adds Buddy dependency and authentication middleware | diff |
+auth-jwe | misc | adds Buddy dependency with the JWE backend | diff |
+oauth | misc | adds OAuth dependency | diff |
+hoplon | misc | adds ClojureScript support with Hoplon to the project | diff |
+cucumber | misc | adds support for browser based UI testing with Cucumber and clj-webdriver | diff |
+sassc | misc | adds support for SASS/SCSS files using SassC command line compiler | diff |
+war | misc | adds support of building WAR archives for deployment to servers such as Apache Tomcat (should NOT be used for Immutant apps running on WildFly) | diff |
+site | misc | creates template for site using the specified database (H2 by default) and ClojureScript | diff |
+kibit | misc | adds lein-kibit plugin | diff |
+servlet | misc | adds middleware for handling Servlet context | diff |
+basic | misc | generates a bare bones luminus project | diff |
+async | misc | support for async (= 3 argument) ring handlers |
To add a profile simply pass it as an argument after your application name, e.g.:
lein new luminus myapp +cljs
You can also mix multiple profiles when creating the application, e.g.:
lein new luminus myapp +auth +postgres
To build as a executable Java ARchive (JAR) standalone, run the following command:
lein uberjar
Or if using the +boot profile:
boot uberjar
To run the resulting standalone executable .jar
file, do as you would with any other:
user$ java -jar target/myapp.jar
15-Sep-14 16:06:21 APc47d.4f39.65e6.uhn.ca INFO [myapp.handler] -
-=[myapp started successfully]=-
16:06:21.685 INFO [org.projectodd.wunderboss.web.Web] (main) Registered web context /
15-Sep-14 16:06:21 APc47d.4f39.65e6.uhn.ca INFO [myapp.core] - server started on port: 3002
Performance Testing
The app can be stress tested by running the Apache benchmark command:
ab -c 10 -n 1000 http://127.0.0.1:3000/
The memory and CPU usage can be inspected by running either jconsole
or jvisualvm
and attaching them to a running Luminus server.
Async Ring Handlers
Using async ring handlers is possible but adds another layer of complexity. If things go wrong you'll see a blank screen, possibly without any error message.
The server (undertow, jetty, servlet) and every middleware in the chain has to support async request handling.
To enable: add :async? true
to your config maps.
Tested combinations:
- default (undertow)
- +war
- +servlet +war (this implies jetty9): http://localhost:3000/your-ns instead of just /
- +jetty +war: http://localhost:3000/your-ns instead of just /
- +jetty: works
- +http-kit
- +aleph
Other Templates
- chestnut
- duct
- fulcro-template
- pedestal
- reagent-template
- re-frame-template
- reagent-figwheel
- reagent-seed
- vase
There is also a public comparison chart of the common templates.
License
Copyright © 2016 Dmitri Sotnikov
Distributed under the MIT License.