jetty-rackup 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +20 -0
- data/README.markdown +89 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/bin/jetty-rackup +5 -0
- data/examples/just_ruby/app.rb +17 -0
- data/examples/just_ruby/config.ru +7 -0
- data/examples/just_ruby/public/hello.html +1 -0
- data/examples/using_java/WEB-INF/classes/Some.class +0 -0
- data/examples/using_java/WEB-INF/lib/other.jar +0 -0
- data/examples/using_java/app.rb +21 -0
- data/examples/using_java/config.ru +7 -0
- data/examples/using_java/java/Other.java +3 -0
- data/examples/using_java/java/Some.java +3 -0
- data/jars/core-3.1.1.jar +0 -0
- data/jars/jetty-6.1.14.jar +0 -0
- data/jars/jetty-plus-6.1.14.jar +0 -0
- data/jars/jetty-util-6.1.14.jar +0 -0
- data/jars/jruby-rack-0.9.5.jar +0 -0
- data/jars/jsp-2.1.jar +0 -0
- data/jars/jsp-api-2.1.jar +0 -0
- data/jars/servlet-api-2.5-6.1.14.jar +0 -0
- data/lib/jetty-rackup.rb +10 -0
- data/lib/jetty-rackup/bootstrap.rb +119 -0
- data/lib/jetty-rackup/server.rb +40 -0
- data/test/helper.rb +10 -0
- data/test/test_jetty-rackup.rb +7 -0
- metadata +86 -0
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 Jason Rogers
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.markdown
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
jetty-rackup
|
2
|
+
============
|
3
|
+
|
4
|
+
For the newer projects we decided to switch from MRI to JRuby. One of
|
5
|
+
the bigger questions is certainly the deployment.
|
6
|
+
|
7
|
+
Reading and trying all the warbler stuff, we had enough of packaging and
|
8
|
+
wanted to do it the Ruby/Sinatra way (with a standalone script, where
|
9
|
+
one can consciously start things like `run Sinatra::Application` from a
|
10
|
+
rackup script).
|
11
|
+
|
12
|
+
Embedding jetty is also mentioned in the jetty documentation "For many
|
13
|
+
applications, HTTP is just another interface protocol. Jetty can easily
|
14
|
+
be embedded in such applications and products without adopting a WWW
|
15
|
+
centric application architecture."
|
16
|
+
|
17
|
+
So here is the solution:
|
18
|
+
|
19
|
+
* write your Rack based application as usual
|
20
|
+
* create a rackup script `config.ru` as usual; there is more information in
|
21
|
+
the official tutorial
|
22
|
+
<http://wiki.github.com/rack/rack/tutorial-rackup-howto>
|
23
|
+
* install jetty-rackup (this project), e.g.
|
24
|
+
`git clone git://github.com/geekq/jetty-rackup.git`
|
25
|
+
* from your application folder run `jetty-rackup`. You can also provide
|
26
|
+
a path to non-standard rackup-script and the desired port
|
27
|
+
number for the server to run.
|
28
|
+
|
29
|
+
Now your application runs inside jetty servlet container. Enjoy!
|
30
|
+
|
31
|
+
|
32
|
+
Example
|
33
|
+
-------
|
34
|
+
$cat config.ru
|
35
|
+
|
36
|
+
#\ -p 8765
|
37
|
+
require 'rubygems'
|
38
|
+
gem 'sinatra', '~> 0.9.4'
|
39
|
+
require './my_app.rb'
|
40
|
+
set :run, false # disable built-in sinatra web server
|
41
|
+
set :environment, :development
|
42
|
+
set :base_url, 'http://xxtrial' # custom application option
|
43
|
+
run Sinatra::Application
|
44
|
+
|
45
|
+
|
46
|
+
Binaries
|
47
|
+
--------
|
48
|
+
The jetty and jruby-rack binaries are now provided for your convinience.
|
49
|
+
But you can also download a different version of them, if you wish, from
|
50
|
+
the official web sites of the respective projects:
|
51
|
+
|
52
|
+
* <http://jetty.codehaus.org/jetty/>
|
53
|
+
* <http://kenai.com/projects/jruby-rack/pages/Home>
|
54
|
+
|
55
|
+
|
56
|
+
FAQ
|
57
|
+
---
|
58
|
+
|
59
|
+
> What's the best way to set max memory?
|
60
|
+
|
61
|
+
jruby -J-Xmx2048m /usr/local/lib/jetty-rackup/jetty-rackup config.ru
|
62
|
+
|
63
|
+
See also
|
64
|
+
--------
|
65
|
+
For Rails deployment you may prefer jetty-rails
|
66
|
+
<http://jetty-rails.rubyforge.org/>
|
67
|
+
|
68
|
+
|
69
|
+
Copyright
|
70
|
+
---------
|
71
|
+
(c) 2009 Vodafone Group Services GmbH
|
72
|
+
|
73
|
+
|
74
|
+
Author
|
75
|
+
------
|
76
|
+
Vladimir Dobriakov, innoQ Deutschland GmbH
|
77
|
+
<http://blog.geekq.net>, <http://www.innoq.com/blog/vd>
|
78
|
+
|
79
|
+
With contributions by [Leandro Silva](http://leandrosilva.com.br/) and
|
80
|
+
[Jason Rogers](http://wordsanddeeds.org/)
|
81
|
+
|
82
|
+
Further Credits
|
83
|
+
---------------
|
84
|
+
* Michal Hantl for the first working jetty based 'Hello world'
|
85
|
+
application. <http://michal.hantl.cz/>
|
86
|
+
* Nick Sieger for the explanation of servlet context init params and of
|
87
|
+
course jruby-rack itself. <http://blog.nicksieger.com/>
|
88
|
+
|
89
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "jetty-rackup"
|
8
|
+
gem.summary = %Q{Rack + Jetty = Retty}
|
9
|
+
gem.description = %Q{Runs a rack conform application inside jetty web server}
|
10
|
+
gem.email = "jacaetevha@gmail.com"
|
11
|
+
gem.homepage = "http://github.com/jacaetevha/jetty-rackup"
|
12
|
+
gem.authors = ["Jason Rogers"]
|
13
|
+
# gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
14
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
|
+
end
|
16
|
+
Jeweler::GemcutterTasks.new
|
17
|
+
rescue LoadError
|
18
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
19
|
+
end
|
20
|
+
|
21
|
+
require 'rake/testtask'
|
22
|
+
Rake::TestTask.new(:test) do |test|
|
23
|
+
test.libs << 'lib' << 'test'
|
24
|
+
test.pattern = 'test/**/test_*.rb'
|
25
|
+
test.verbose = true
|
26
|
+
end
|
27
|
+
|
28
|
+
begin
|
29
|
+
require 'rcov/rcovtask'
|
30
|
+
Rcov::RcovTask.new do |test|
|
31
|
+
test.libs << 'test'
|
32
|
+
test.pattern = 'test/**/test_*.rb'
|
33
|
+
test.verbose = true
|
34
|
+
end
|
35
|
+
rescue LoadError
|
36
|
+
task :rcov do
|
37
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
task :test => :check_dependencies
|
42
|
+
|
43
|
+
task :default => :test
|
44
|
+
|
45
|
+
require 'rake/rdoctask'
|
46
|
+
Rake::RDocTask.new do |rdoc|
|
47
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
48
|
+
|
49
|
+
rdoc.rdoc_dir = 'rdoc'
|
50
|
+
rdoc.title = "jetty-rackup #{version}"
|
51
|
+
rdoc.rdoc_files.include('README*')
|
52
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
53
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/bin/jetty-rackup
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'sinatra'
|
2
|
+
|
3
|
+
# If you want to have auto reload in development mode (what is sweet)
|
4
|
+
# you can uncomment this following lines:
|
5
|
+
#
|
6
|
+
configure :development do
|
7
|
+
Sinatra::Application.reset! # to reload routes and its contents
|
8
|
+
use Rack::Reloader # to reload required every files
|
9
|
+
end
|
10
|
+
|
11
|
+
get '/?' do
|
12
|
+
"hello"
|
13
|
+
end
|
14
|
+
|
15
|
+
get '/:message/?' do |message|
|
16
|
+
"hello #{message}"
|
17
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Hello from HTML
|
Binary file
|
Binary file
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'sinatra'
|
2
|
+
|
3
|
+
# If you want to have auto reload in development mode (what is sweet)
|
4
|
+
# you can uncomment this following lines:
|
5
|
+
#
|
6
|
+
# configure :development do
|
7
|
+
# Sinatra::Application.reset! # to reload routes and its contents
|
8
|
+
# use Rack::Reloader # to reload required every files
|
9
|
+
# end
|
10
|
+
|
11
|
+
get '/some' do
|
12
|
+
import 'Some' # using import
|
13
|
+
|
14
|
+
some = Some.new
|
15
|
+
"From WEB-INF/classes: #{some.say}"
|
16
|
+
end
|
17
|
+
|
18
|
+
get '/other' do
|
19
|
+
other = Java::Other.new # or directly by the Java "namespace"
|
20
|
+
"From WEB-INF/lib: #{other.say}"
|
21
|
+
end
|
data/jars/core-3.1.1.jar
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/jars/jsp-2.1.jar
ADDED
Binary file
|
Binary file
|
Binary file
|
data/lib/jetty-rackup.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
#
|
2
|
+
# Option parsing is based on the original rackup script.
|
3
|
+
#
|
4
|
+
|
5
|
+
automatic = false
|
6
|
+
server_type = nil
|
7
|
+
env = "development"
|
8
|
+
pid = nil
|
9
|
+
options = {:Port => 9292, :Host => "0.0.0.0", :AccessLog => []}
|
10
|
+
|
11
|
+
opts = OptionParser.new("", 24, ' ') { |opts|
|
12
|
+
opts.banner = "Usage: jetty_rackup [ruby options] [rack options] [rackup config]"
|
13
|
+
|
14
|
+
opts.separator ""
|
15
|
+
opts.separator "Ruby options:"
|
16
|
+
|
17
|
+
lineno = 1
|
18
|
+
opts.on("-e", "--eval LINE", "evaluate a LINE of code") { |line|
|
19
|
+
eval line, TOPLEVEL_BINDING, "-e", lineno
|
20
|
+
lineno += 1
|
21
|
+
}
|
22
|
+
|
23
|
+
opts.on("-d", "--debug", "set debugging flags (set $DEBUG to true)") {
|
24
|
+
$DEBUG = true
|
25
|
+
}
|
26
|
+
opts.on("-w", "--warn", "turn warnings on for your script") {
|
27
|
+
$-w = true
|
28
|
+
}
|
29
|
+
|
30
|
+
opts.on("-I", "--include PATH",
|
31
|
+
"specify $LOAD_PATH (may be used more than once)") { |path|
|
32
|
+
$LOAD_PATH.unshift(*path.split(":"))
|
33
|
+
}
|
34
|
+
|
35
|
+
opts.on("-r", "--require LIBRARY",
|
36
|
+
"require the library, before executing your script") { |library|
|
37
|
+
require library
|
38
|
+
}
|
39
|
+
|
40
|
+
opts.separator ""
|
41
|
+
opts.separator "Rack options:"
|
42
|
+
opts.on("-s", "--server SERVER", "serve using SERVER (only jetty is supported)") { |s|
|
43
|
+
server_type = s
|
44
|
+
}
|
45
|
+
|
46
|
+
opts.on("-o", "--host HOST", "listen on HOST (default: 0.0.0.0)") { |host|
|
47
|
+
options[:Host] = host
|
48
|
+
}
|
49
|
+
|
50
|
+
opts.on("-p", "--port PORT", "use PORT (default: 9292)") { |port|
|
51
|
+
options[:Port] = port.to_i
|
52
|
+
}
|
53
|
+
|
54
|
+
opts.on("-E", "--env ENVIRONMENT", "use ENVIRONMENT for defaults (default: development)") { |e|
|
55
|
+
env = e
|
56
|
+
}
|
57
|
+
|
58
|
+
opts.on("-D", "--daemonize", "run daemonized in the background - does not work with JRuby - please use a wrapper shell script") { |d|
|
59
|
+
daemonize = d ? true : false
|
60
|
+
}
|
61
|
+
|
62
|
+
opts.on("-P", "--pid FILE", "file to store PID (default: rack.pid)") { |f|
|
63
|
+
pid = File.expand_path(f)
|
64
|
+
}
|
65
|
+
|
66
|
+
opts.separator ""
|
67
|
+
opts.separator "Common options:"
|
68
|
+
|
69
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
70
|
+
puts opts
|
71
|
+
exit
|
72
|
+
end
|
73
|
+
|
74
|
+
opts.on_tail("--version", "Show version") do
|
75
|
+
puts "Rack #{Rack.version}"
|
76
|
+
exit
|
77
|
+
end
|
78
|
+
|
79
|
+
opts.parse! ARGV
|
80
|
+
}
|
81
|
+
|
82
|
+
require 'pp' if $DEBUG
|
83
|
+
|
84
|
+
config = ARGV[0] || "config.ru"
|
85
|
+
if !File.exist? config
|
86
|
+
abort "configuration #{config} not found"
|
87
|
+
end
|
88
|
+
|
89
|
+
if config =~ /\.ru$/
|
90
|
+
rackup = File.read(config)
|
91
|
+
if rackup[/^#\\(.*)/]
|
92
|
+
opts.parse! $1.split(/\s+/)
|
93
|
+
end
|
94
|
+
#rackup << "\n set :environment, :#{env}" if env
|
95
|
+
rackup.gsub! /set :environment, .*?$/, "set :environment, :#{env}" if env
|
96
|
+
else
|
97
|
+
abort "configuration file with .ru extention expected, was '#{config}'"
|
98
|
+
end
|
99
|
+
|
100
|
+
#
|
101
|
+
# Boot the server.
|
102
|
+
#
|
103
|
+
|
104
|
+
unless server = Rack::Handler.get(server_type)
|
105
|
+
server = Rack::Handler::Jetty
|
106
|
+
end
|
107
|
+
|
108
|
+
p server if $DEBUG
|
109
|
+
|
110
|
+
if $DEBUG
|
111
|
+
pp app
|
112
|
+
pp rackup
|
113
|
+
end
|
114
|
+
|
115
|
+
puts "---- rackup"
|
116
|
+
puts rackup
|
117
|
+
puts "---- "
|
118
|
+
|
119
|
+
server.run rackup, options
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class Rack::Handler::Jetty
|
2
|
+
def self.run(rackup_content, options={})
|
3
|
+
Dir["#{File.dirname(__FILE__)}/../../jars/*.jar"].each { |jar| require jar }
|
4
|
+
|
5
|
+
include_class 'javax.servlet.http.HttpServlet'
|
6
|
+
include_class 'org.mortbay.jetty.Server'
|
7
|
+
include_class 'org.mortbay.jetty.servlet.Context'
|
8
|
+
include_class 'org.mortbay.jetty.servlet.ServletHolder'
|
9
|
+
include_class 'org.jruby.rack.servlet.ServletRackContext'
|
10
|
+
include_class 'org.mortbay.jetty.handler.ResourceHandler'
|
11
|
+
include_class 'org.mortbay.jetty.handler.DefaultHandler'
|
12
|
+
include_class 'org.mortbay.jetty.handler.HandlerList'
|
13
|
+
include_class 'org.mortbay.jetty.handler.ContextHandlerCollection'
|
14
|
+
include_class 'org.mortbay.jetty.servlet.DefaultServlet'
|
15
|
+
|
16
|
+
jetty = org.mortbay.jetty.Server.new options[:Port]
|
17
|
+
|
18
|
+
context = org.mortbay.jetty.servlet.Context.new(nil, "/", org.mortbay.jetty.servlet.Context::NO_SESSIONS)
|
19
|
+
context.add_filter("org.jruby.rack.RackFilter", "/*", org.mortbay.jetty.Handler::DEFAULT)
|
20
|
+
context.set_resource_base(File.dirname(__FILE__))
|
21
|
+
context.add_event_listener(org.jruby.rack.RackServletContextListener.new)
|
22
|
+
|
23
|
+
context.set_init_params(java.util.HashMap.new(
|
24
|
+
'org.mortbay.jetty.servlet.Default.relativeResourceBase' => '/public',
|
25
|
+
'rackup' => rackup_content,
|
26
|
+
'jruby.max.runtimes' => '1'))
|
27
|
+
|
28
|
+
context.add_servlet(org.mortbay.jetty.servlet.ServletHolder.new(
|
29
|
+
org.mortbay.jetty.servlet.DefaultServlet.new), "/")
|
30
|
+
|
31
|
+
JRuby.runtime.jruby_class_loader.add_url(java.io.File.new("WEB-INF/classes").to_url)
|
32
|
+
|
33
|
+
Dir["WEB-INF/lib/**/*.jar"].each do |jar|
|
34
|
+
JRuby.runtime.jruby_class_loader.add_url(java.io.File.new(jar).to_url)
|
35
|
+
end
|
36
|
+
|
37
|
+
jetty.set_handler(context)
|
38
|
+
jetty.start
|
39
|
+
end
|
40
|
+
end
|
data/test/helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jetty-rackup
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jason Rogers
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-02-12 00:00:00 +01:00
|
14
|
+
default_executable: jetty-rackup
|
15
|
+
dependencies: []
|
16
|
+
|
17
|
+
description: Runs a rack conform application inside jetty web server
|
18
|
+
email: jacaetevha@gmail.com
|
19
|
+
executables:
|
20
|
+
- jetty-rackup
|
21
|
+
extensions: []
|
22
|
+
|
23
|
+
extra_rdoc_files:
|
24
|
+
- LICENSE
|
25
|
+
- README.markdown
|
26
|
+
files:
|
27
|
+
- LICENSE
|
28
|
+
- README.markdown
|
29
|
+
- Rakefile
|
30
|
+
- VERSION
|
31
|
+
- bin/jetty-rackup
|
32
|
+
- examples/just_ruby/app.rb
|
33
|
+
- examples/just_ruby/config.ru
|
34
|
+
- examples/just_ruby/public/hello.html
|
35
|
+
- examples/using_java/WEB-INF/classes/Some.class
|
36
|
+
- examples/using_java/WEB-INF/lib/other.jar
|
37
|
+
- examples/using_java/app.rb
|
38
|
+
- examples/using_java/config.ru
|
39
|
+
- examples/using_java/java/Other.java
|
40
|
+
- examples/using_java/java/Some.java
|
41
|
+
- jars/core-3.1.1.jar
|
42
|
+
- jars/jetty-6.1.14.jar
|
43
|
+
- jars/jetty-plus-6.1.14.jar
|
44
|
+
- jars/jetty-util-6.1.14.jar
|
45
|
+
- jars/jruby-rack-0.9.5.jar
|
46
|
+
- jars/jsp-2.1.jar
|
47
|
+
- jars/jsp-api-2.1.jar
|
48
|
+
- jars/servlet-api-2.5-6.1.14.jar
|
49
|
+
- lib/jetty-rackup.rb
|
50
|
+
- lib/jetty-rackup/bootstrap.rb
|
51
|
+
- lib/jetty-rackup/server.rb
|
52
|
+
- test/helper.rb
|
53
|
+
- test/test_jetty-rackup.rb
|
54
|
+
has_rdoc: true
|
55
|
+
homepage: http://github.com/jacaetevha/jetty-rackup
|
56
|
+
licenses: []
|
57
|
+
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options: []
|
60
|
+
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: "0"
|
75
|
+
requirements: []
|
76
|
+
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 1.5.0
|
79
|
+
signing_key:
|
80
|
+
specification_version: 3
|
81
|
+
summary: Rack + Jetty = Retty
|
82
|
+
test_files:
|
83
|
+
- examples/just_ruby/app.rb
|
84
|
+
- examples/using_java/app.rb
|
85
|
+
- test/helper.rb
|
86
|
+
- test/test_jetty-rackup.rb
|