Play uses Netty in both development and production modes.
The play run
command is meant to execute the application in development mode.
For production, create a distribution with the play dist
command. Then copy the generated zip file to the production host, extract it, and run the start script from the package's bin
directory.
See:
This session log shows the process:
fernando@fernando-i7-mint ~/work/servicero/servicero-devops $ cd /tmp
fernando@fernando-i7-mint /tmp $ mkdir 0958
fernando@fernando-i7-mint /tmp $ cd 0958
fernando@fernando-i7-mint /tmp/0958 $ play new app1
_
_ __ | | __ _ _ _
| '_ \| |/ _' | || |
| __/|_|\____|\__ /
|_| |__/
play 2.2.2 built with Scala 2.10.3 (running Java 1.7.0_51), http://www.playframework.com
The new application will be created in /tmp/0958/app1
What is the application name? [app1]
>
Which template do you want to use for this new application?
1 - Create a simple Scala application
2 - Create a simple Java application
> 1
OK, application app1 is created.
Have fun!
fernando@fernando-i7-mint /tmp/0958 $ cd app1
fernando@fernando-i7-mint /tmp/0958/app1 $ play dist
[info] Loading project definition from /tmp/0958/app1/project
[info] Set current project to app1 (in build file:/tmp/0958/app1/)
[info] Packaging /tmp/0958/app1/target/scala-2.10/app1_2.10-1.0-SNAPSHOT-sources.jar ...
[info] Updating {file:/tmp/0958/app1/}app1...
[info] Done packaging.
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Wrote /tmp/0958/app1/target/scala-2.10/app1_2.10-1.0-SNAPSHOT.pom
[info] Main Scala API documentation to /tmp/0958/app1/target/scala-2.10/api...
[info] Compiling 5 Scala sources and 1 Java source to /tmp/0958/app1/target/scala-2.10/classes...
model contains 17 documentable templates
[info] Main Scala API documentation successful.
[info] Packaging /tmp/0958/app1/target/scala-2.10/app1_2.10-1.0-SNAPSHOT-javadoc.jar ...
[info] Done packaging.
[info] Packaging /tmp/0958/app1/target/scala-2.10/app1_2.10-1.0-SNAPSHOT.jar ...
[info] Done packaging.
[info]
[info] Your package is ready in /tmp/0958/app1/target/universal/app1-1.0-SNAPSHOT.zip
[info]
[success] Total time: 15 s, completed Apr 2, 2014 9:59:14 AM
fernando@fernando-i7-mint /tmp/0958/app1 $ ls -la target/universal/*.zip
-rw-r--r-- 1 fernando fernando 31442929 Abr 2 09:59 target/universal/app1-1.0-SNAPSHOT.zip
fernando@fernando-i7-mint /tmp/0958/app1 $ cd /tmp
fernando@fernando-i7-mint /tmp $ unzip 0958/app1/target/universal/app1-1.0-SNAPSHOT.zip
Archive: 0958/app1/target/universal/app1-1.0-SNAPSHOT.zip
inflating: app1-1.0-SNAPSHOT/lib/default.app1-1.0-SNAPSHOT.jar
inflating: app1-1.0-SNAPSHOT/lib/org.scala-lang.scala-library-2.10.3.jar
inflating: app1-1.0-SNAPSHOT/lib/com.typesafe.play.play-jdbc_2.10-2.2.2.jar
inflating: app1-1.0-SNAPSHOT/lib/com.typesafe.play.play_2.10-2.2.2.jar
inflating: app1-1.0-SNAPSHOT/lib/com.typesafe.play.sbt-link-2.2.2.jar
inflating: app1-1.0-SNAPSHOT/lib/org.javassist.javassist-3.18.0-GA.jar
inflating: app1-1.0-SNAPSHOT/lib/com.typesafe.play.play-exceptions-2.2.2.jar
inflating: app1-1.0-SNAPSHOT/lib/com.typesafe.play.templates_2.10-2.2.2.jar
inflating: app1-1.0-SNAPSHOT/lib/com.github.scala-incubator.io.scala-io-file_2.10-0.4.2.jar
inflating: app1-1.0-SNAPSHOT/lib/com.github.scala-incubator.io.scala-io-core_2.10-0.4.2.jar
inflating: app1-1.0-SNAPSHOT/lib/com.jsuereth.scala-arm_2.10-1.3.jar
inflating: app1-1.0-SNAPSHOT/lib/com.typesafe.play.play-iteratees_2.10-2.2.2.jar
inflating: app1-1.0-SNAPSHOT/lib/org.scala-stm.scala-stm_2.10-0.7.jar
inflating: app1-1.0-SNAPSHOT/lib/com.typesafe.config-1.0.2.jar
inflating: app1-1.0-SNAPSHOT/lib/com.typesafe.play.play-json_2.10-2.2.2.jar
inflating: app1-1.0-SNAPSHOT/lib/com.typesafe.play.play-functional_2.10-2.2.2.jar
inflating: app1-1.0-SNAPSHOT/lib/com.typesafe.play.play-datacommons_2.10-2.2.2.jar
inflating: app1-1.0-SNAPSHOT/lib/joda-time.joda-time-2.2.jar
inflating: app1-1.0-SNAPSHOT/lib/org.joda.joda-convert-1.3.1.jar
inflating: app1-1.0-SNAPSHOT/lib/com.fasterxml.jackson.core.jackson-annotations-2.2.2.jar
inflating: app1-1.0-SNAPSHOT/lib/com.fasterxml.jackson.core.jackson-core-2.2.2.jar
inflating: app1-1.0-SNAPSHOT/lib/com.fasterxml.jackson.core.jackson-databind-2.2.2.jar
inflating: app1-1.0-SNAPSHOT/lib/org.scala-lang.scala-reflect-2.10.3.jar
inflating: app1-1.0-SNAPSHOT/lib/io.netty.netty-3.7.0.Final.jar
inflating: app1-1.0-SNAPSHOT/lib/com.typesafe.netty.netty-http-pipelining-1.1.2.jar
inflating: app1-1.0-SNAPSHOT/lib/org.slf4j.slf4j-api-1.7.5.jar
inflating: app1-1.0-SNAPSHOT/lib/org.slf4j.jul-to-slf4j-1.7.5.jar
inflating: app1-1.0-SNAPSHOT/lib/org.slf4j.jcl-over-slf4j-1.7.5.jar
inflating: app1-1.0-SNAPSHOT/lib/ch.qos.logback.logback-core-1.0.13.jar
inflating: app1-1.0-SNAPSHOT/lib/ch.qos.logback.logback-classic-1.0.13.jar
inflating: app1-1.0-SNAPSHOT/lib/com.typesafe.akka.akka-actor_2.10-2.2.0.jar
inflating: app1-1.0-SNAPSHOT/lib/com.typesafe.akka.akka-slf4j_2.10-2.2.0.jar
inflating: app1-1.0-SNAPSHOT/lib/org.apache.commons.commons-lang3-3.1.jar
inflating: app1-1.0-SNAPSHOT/lib/com.ning.async-http-client-1.7.18.jar
inflating: app1-1.0-SNAPSHOT/lib/oauth.signpost.signpost-core-1.2.1.2.jar
inflating: app1-1.0-SNAPSHOT/lib/commons-codec.commons-codec-1.3.jar
inflating: app1-1.0-SNAPSHOT/lib/oauth.signpost.signpost-commonshttp4-1.2.1.2.jar
inflating: app1-1.0-SNAPSHOT/lib/org.apache.httpcomponents.httpcore-4.0.1.jar
inflating: app1-1.0-SNAPSHOT/lib/org.apache.httpcomponents.httpclient-4.0.1.jar
inflating: app1-1.0-SNAPSHOT/lib/commons-logging.commons-logging-1.1.1.jar
inflating: app1-1.0-SNAPSHOT/lib/xerces.xercesImpl-2.11.0.jar
inflating: app1-1.0-SNAPSHOT/lib/xml-apis.xml-apis-1.4.01.jar
inflating: app1-1.0-SNAPSHOT/lib/javax.transaction.jta-1.1.jar
inflating: app1-1.0-SNAPSHOT/lib/com.jolbox.bonecp-0.8.0.RELEASE.jar
inflating: app1-1.0-SNAPSHOT/lib/com.google.guava.guava-14.0.1.jar
inflating: app1-1.0-SNAPSHOT/lib/com.h2database.h2-1.3.172.jar
inflating: app1-1.0-SNAPSHOT/lib/tyrex.tyrex-1.0.1.jar
inflating: app1-1.0-SNAPSHOT/lib/com.typesafe.play.anorm_2.10-2.2.2.jar
inflating: app1-1.0-SNAPSHOT/lib/com.typesafe.play.play-cache_2.10-2.2.2.jar
inflating: app1-1.0-SNAPSHOT/lib/net.sf.ehcache.ehcache-core-2.6.6.jar
inflating: app1-1.0-SNAPSHOT/bin/app1
inflating: app1-1.0-SNAPSHOT/bin/app1.bat
inflating: app1-1.0-SNAPSHOT/conf/application.conf
inflating: app1-1.0-SNAPSHOT/share/doc/api/index.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/index.js
inflating: app1-1.0-SNAPSHOT/share/doc/api/package.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/Routes$.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/views/package.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/views/html/main$.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/views/html/index$.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/views/html/package.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/jquery.js
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/signaturebg.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/class_big.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/package_big.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/tools.tooltip.js
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/template.js
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/filter_box_right.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/package.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/unselected.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/trait_to_object_big.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/index.css
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/filterboxbg.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/constructorsbg.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/filterboxbarbg.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/object_diagram.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/diagrams.js
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/index.js
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/selected-right.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/jquery-ui.js
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/trait_big.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/ownerbg.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/trait.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/selected2.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/signaturebg2.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/ref-index.css
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/filterboxbarbg.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/selected2-right.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/object.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/object_big.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/type_big.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/arrow-right.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/selected.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/type.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/object_to_type_big.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/class.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/type_diagram.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/type_to_object_big.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/remove.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/object_to_class_big.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/fullcommenttopbg.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/selected-right-implicits.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/defbg-green.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/trait_diagram.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/filter_box_left2.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/conversionbg.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/modernizr.custom.js
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/object_to_trait_big.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/filterbg.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/filter_box_left.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/ownderbg2.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/ownerbg2.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/navigation-li-a.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/class_to_object_big.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/jquery.layout.js
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/diagrams.css
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/navigation-li.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/defbg-blue.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/template.css
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/valuemembersbg.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/arrow-down.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/scheduler.js
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/selected-implicits.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/packagesbg.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/typebg.gif
inflating: app1-1.0-SNAPSHOT/share/doc/api/lib/class_diagram.png
inflating: app1-1.0-SNAPSHOT/share/doc/api/controllers/ReverseAssets.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/controllers/routes.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/controllers/Application$.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/controllers/package.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/controllers/ReverseApplication.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/controllers/ref/ReverseAssets.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/controllers/ref/package.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/controllers/ref/ReverseApplication.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/controllers/javascript/ReverseAssets.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/controllers/javascript/package.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/controllers/javascript/ReverseApplication.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/index/index-v.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/index/index-s.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/index/index-c.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/index/index-a.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/index/index-r.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/index/index-f.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/index/index-h.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/index/index-i.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/index/index-d.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/index/index-m.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/index/index-j.html
inflating: app1-1.0-SNAPSHOT/share/doc/api/index/index-p.html
inflating: app1-1.0-SNAPSHOT/README
fernando@fernando-i7-mint /tmp $ cd app1-1.0-SNAPSHOT/
fernando@fernando-i7-mint /tmp/app1-1.0-SNAPSHOT $ ls -la
total 28
drwxr-xr-x 6 fernando fernando 4096 Abr 2 10:00 .
drwxrwxrwt 14 root root 4096 Abr 2 10:00 ..
drwxr-xr-x 2 fernando fernando 4096 Abr 2 10:00 bin
drwxr-xr-x 2 fernando fernando 4096 Abr 2 10:00 conf
drwxr-xr-x 2 fernando fernando 4096 Abr 2 10:00 lib
-rw-r--r-- 1 fernando fernando 147 Fev 28 14:45 README
drwxr-xr-x 3 fernando fernando 4096 Abr 2 10:00 share
fernando@fernando-i7-mint /tmp/app1-1.0-SNAPSHOT $ ls -la bin
total 28
drwxr-xr-x 2 fernando fernando 4096 Abr 2 10:00 .
drwxr-xr-x 6 fernando fernando 4096 Abr 2 10:00 ..
-rwxr-xr-x 1 fernando fernando 11510 Abr 2 09:59 app1
-rw-r--r-- 1 fernando fernando 5732 Abr 2 09:59 app1.bat
fernando@fernando-i7-mint /tmp/app1-1.0-SNAPSHOT $ bin/app1
Play server process ID is 4582
[info] play - Application started (Prod)
[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000