Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/square/jetpack

jet.pack: package your JRuby rack app for Jetty.
https://github.com/square/jetpack

Last synced: about 1 month ago
JSON representation

jet.pack: package your JRuby rack app for Jetty.

Awesome Lists containing this project

README

        

# Jetpack

[![Build Status](https://travis-ci.org/square/jetpack.svg?branch=master)](https://travis-ci.org/square/jetpack)

jet.pack: package your JRuby webapp for Jetty.

There are already many tools in existence that help developers run JRuby webapps on popular servlet containers,
such as [trinidad](https://github.com/trinidad/trinidad), [warbler](https://github.com/jruby/warbler), [mizuno](https://github.com/matadon/mizuno), and [kirk](https://github.com/strobecorp/kirk).
Jetpack is not fundamentally different from these tools: like the rest of them it uses the [jruby-rack](https://github.com/jruby/jruby-rack) jar as a foundation. The key differences are stylistic.

Jetpack:

* Uses [Jetty](http://jetty.codehaus.org/jetty/)... in all of its
out-of-the-box, XML-configuration-file glory.
* Uses bundler to "vendor" all of your gems.
* Uses the [jruby-complete jar](http://jruby.org/download), and provides
convenience wrapper scripts (`bin/ruby` and `bin/rake`) in your project.
* Does not attempt to run Jetty in a ruby-first, embedded manner.
* Does not assume JRuby is already installed in your server environment (a
basic JRE will do just fine).
* Does not force your ruby webapp to load files from a jar or war.

In short, Jetpack creates a little self-contained JRuby/Jetty/vendored-gem world around your ruby project,
which you only need to transport to a server and fire up using a JRE.

Jetpack's implementation mainly consists of an [honest, proletarian, bash-like ruby script](https://github.com/square/jetpack/blob/master/bin/jetpack).

## Install

Deploys need to be performed using MRI. Here is a sample section of a project Gemfile:

platforms :mri do
gem 'jetpack'
end

Create `config/jetpack.yml` in your project:

jruby: "http://jruby.org.s3.amazonaws.com/downloads/1.7.25/jruby-complete-1.7.25.jar"
jetty: "http://download.eclipse.org/jetty/9.2.18.v20160721/dist/jetty-distribution-9.2.18.v20160721.zip"
jruby-rack: "http://central.maven.org/maven2/org/jruby/rack/jruby-rack/1.1.20/jruby-rack-1.1.20.jar"
app_user: "myapp"
app_root: "/usr/local/myapp/myapp"

Some other settings you might care about:

java_options: "-Xmx2048m"
http_port: 4080
https_port: 4443
max_threads: 50
ruby_version: 1.8
app_type: rack
keystore_type: JCEKS
keystore: /data/app/secrets/mystore.jceks
keystore_password: sekret
bundle_without: [test, development]

Run Jetpack:

bundle exec jetpack .

Of note, you'll now have:

* a `bin` directory, with scripts that run ruby and rake, using jruby and with the gems defined in your project.
* a `vendor/jetty directory`, containing everything necessary to run your app using jetty.
* You can try your app out by cd'ing into `vendor/jetty` and running `RAILS_ENV=development java -jar start.jar`
* `vendor/jetty/jetty-init` is an init script that starts your project. You should symlink `/etc/init.d/[appuser]-jetty` to this file, and then point monit at `/etc/init.d/[appuser]-jetty`