組込みJettyとsinatraで作るお手軽Web環境
作業用スクリプトの管理ツールみたいなのをサクッと作りたかったんだけどRubyやpythonで普通に作るとgemとかの依存ライブラリの管理が面倒。
その点は依存ライブラリをwarに固めてJVMさえあればどこでも動くJavaは本当にすごいと思う。
というわけで、JRubyを使ってwarに固めてどこでもお手軽に使えるWebアプリの作り方を調べたのでまとめときます。
え、Javaで書けば良いって? だって面倒じゃん。
まずはJRubyを入れるところから。Linux環境ならrvmが楽ですね。
$ rvm install jruby-head $ rvm use jruby-head
$ gem install warbler bundler
では、アプリを書きましょう. 1から作っても良いけど、こちらに出来たものあるのでそれ使います。
$git clone git://github.com/koduki/sinatra_quickstart.git
各種設定ファイルはこんな感じ.
$cat config/warble.rb # Disable Rake-environment-task framework detection by uncommenting/setting to false # Warbler.framework_detection = false # Warbler web application assembly configuration file Warbler::Config.new do |config| config.dirs = %w(app config tmp) config.includes = FileList["init.rb"] config.gems += ["sinatra"] config.gems -= ["rails"] config.gem_dependencies = true end
$ cat Gemfile source "http://rubygems.org" gem "sinatra" gem "sequel" group :development do gem "warbler" end
$ cat Rakefile require 'rubygems' require 'warbler' Warbler::Task.new
config/warbleがwarを作るときの設定ファイル. あとwarを作るときはGemfileの設定を依存ライブラリとして自動で組み込むようのでbundler以外でライブラリを管理しない方が楽そう。
warの作成はrakeコマンドで。
$ rake war
これでglassfishやらtomcatやらに乗せれば完了なのだけど、それも面倒なのでjenkinsみたいにスタンドアローンでwarを起動出きるようにjettyを組み込みます。
standalone-warという超便利なgradleが公開してあるのでこちらを使います。Groovyとかgradleとかはどこのご家庭にもあると思いますのでインストールは省略.
$ git clone https://github.com/xlson/standalone-war.git $ cd standalone-war/standaloneify $ echo "outWar=build/webapp-standalone.war" > gradle.properties $ gradle -PinWar=ruby/deploy_test/deploy_test.war
これでwebapp-standalone.warというjettyを組み込まれたwarが出来ます。超すごい!
実行する時はこんな感じ
$ java -jar build/webapp-standalone.war
これで、どこでもお手軽に動かせるWebアプリの完成ー。
必要なライブラリを足してもwarにまとまってるから取り回しが楽なのが魅力ですね。JavaEEはほんとその辺良く考えられてるよなぁ。
では、Happy Hacking!