jubilee 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source :rubygems
2
2
 
3
- gem 'rack'
3
+ gem 'rack', '~> 1.4.1'
4
4
  gem 'spoon'
5
5
 
6
6
  group :development do
data/Gemfile.lock CHANGED
@@ -15,16 +15,11 @@ GEM
15
15
  git (>= 1.2.5)
16
16
  rake
17
17
  rdoc
18
- json (1.7.5)
19
18
  json (1.7.5-java)
20
19
  listen (0.5.3)
21
20
  lumberjack (1.0.2)
22
21
  method_source (0.8.1)
23
22
  multipart-post (1.1.5)
24
- pry (0.9.10)
25
- coderay (~> 1.0.5)
26
- method_source (~> 0.8)
27
- slop (~> 3.3.1)
28
23
  pry (0.9.10-java)
29
24
  coderay (~> 1.0.5)
30
25
  method_source (~> 0.8)
@@ -32,7 +27,6 @@ GEM
32
27
  spoon (~> 0.0)
33
28
  rack (1.4.1)
34
29
  rake (10.0.2)
35
- rcov (0.9.11)
36
30
  rcov (0.9.11-java)
37
31
  rdoc (3.12)
38
32
  json (~> 1.4)
@@ -49,6 +43,6 @@ DEPENDENCIES
49
43
  jeweler
50
44
  multipart-post
51
45
  pry
52
- rack
46
+ rack (~> 1.4.1)
53
47
  rcov
54
48
  spoon
data/README.md CHANGED
@@ -3,23 +3,16 @@ Jubilee
3
3
 
4
4
  A fast rack server build upon [vertx](http://vertx.io)
5
5
 
6
- Known Issues
7
- ----------
8
-
9
- * Direct use of HttpServerResponse object in Ruby Response class is
10
- potentially slow. see [Improving Java Integration
11
- Performance](https://github.com/jruby/jruby/wiki/ImprovingJavaIntegrationPerformance)
12
-
13
6
  TODO
14
7
  ----------
15
8
 
16
- * Daemon mode
17
- * Try non-block IO
9
+ * Daemon mode (WIP)
10
+ * [TeeInput](https://github.com/defunkt/unicorn/blob/master/lib/unicorn/tee_input.rb)
18
11
  * Site(WIP)
19
12
  * benchmark: Get, static file, post
20
13
 
21
14
  * EventBus
22
- * WebSocket [need test]
15
+ * WebSocket
23
16
 
24
17
  Fixed
25
18
  -----------
@@ -39,23 +32,30 @@ Installation
39
32
  ```gem install jubilee```
40
33
 
41
34
  Performance
42
- ===========
43
-
44
- Get request for test/sinatra_app
45
35
  -----------
46
36
 
47
- Got rival performance as puma.
48
- (ab -c 20 -n 10000)
37
+ Get request for [sinatra test app](https://github.com/isaiah/jubilee/tree/master/test/sinatra_app):
49
38
 
50
- jubilee: 1750rps after warm
51
- puma: 1327rps after warm
39
+ with ```ab -c 20 -n 10000```
52
40
 
53
- unicorn (worker 10): 1440rps
41
+ 1750rps after warm
54
42
 
55
- Serve static file
56
- -----------
43
+ unicorn (worker 10): 1440rps
57
44
 
58
45
  Requirement
59
- ===========
46
+ -----------
60
47
 
61
48
  JRuby '~> 1.7.0'
49
+
50
+ License
51
+ --------
52
+
53
+ The same as JRuby and vertx
54
+
55
+
56
+ Kudos
57
+ --------
58
+
59
+ Inspired by [this
60
+ post](http://blog.jayfields.com/2012/05/how-i-open-source.html), I
61
+ decide to release it early
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.2.0
@@ -7,7 +7,6 @@ import org.jruby.jubilee.impl.RubyIORackInput;
7
7
  import org.jruby.runtime.builtin.IRubyObject;
8
8
  import org.vertx.java.core.Handler;
9
9
  import org.vertx.java.core.SimpleHandler;
10
- import org.vertx.java.core.Vertx;
11
10
  import org.vertx.java.core.buffer.Buffer;
12
11
  import org.vertx.java.core.http.HttpServerRequest;
13
12
 
@@ -23,15 +22,13 @@ public class RackApplication {
23
22
  private IRubyObject app;
24
23
  private boolean ssl;
25
24
  private Buffer bodyBuf;
26
- private Vertx vertx;
27
25
 
28
26
  private ExecutorService exec;
29
27
 
30
- public RackApplication(Vertx vertx, IRubyObject app, boolean ssl) {
28
+ public RackApplication(IRubyObject app, boolean ssl) {
31
29
  this.app = app;
32
30
  this.ssl = ssl;
33
31
  bodyBuf = new Buffer(0);
34
- this.vertx = vertx;
35
32
  exec = Executors.newCachedThreadPool();
36
33
  }
37
34
 
@@ -51,13 +48,8 @@ public class RackApplication {
51
48
  RackInput input = new RubyIORackInput(runtime, bodyBuf, bodyLatch);
52
49
  RackEnvironment env = new DefaultRackEnvironment(runtime, request, input, ssl);
53
50
  IRubyObject result = app.callMethod(runtime.getCurrentContext(), "call", env.getEnv());
54
- final RackResponse response = (RackResponse) JavaEmbedUtils.rubyToJava(runtime, result, RackResponse.class);
55
- vertx.runOnLoop(new SimpleHandler() {
56
- @Override
57
- public void handle() {
58
- response.respond(request.response);
59
- }
60
- });
51
+ RackResponse response = (RackResponse) JavaEmbedUtils.rubyToJava(runtime, result, RackResponse.class);
52
+ response.respond(request.response);
61
53
  }
62
54
  };
63
55
  exec.execute(task);
@@ -42,7 +42,7 @@ public class Server extends RubyObject {
42
42
  if (args.length > 2) {
43
43
  this.ssl = args[2].isTrue();
44
44
  }
45
- this.app = new RackApplication(vertx, args[0], this.ssl);
45
+ this.app = new RackApplication(args[0], this.ssl);
46
46
  if (args.length > 3)
47
47
  this.keyStorePath = args[3].toString();
48
48
  if (args.length > 4)
data/lib/jubilee/cli.rb CHANGED
@@ -22,7 +22,7 @@ module Jubilee
22
22
  parse_options
23
23
  @config = Jubilee::Configuration.new(@options)
24
24
  @config.load
25
- server = Jubilee::Server.new(@config.app, {port: @config.port, ssl: @config.ssl})
25
+ server = Jubilee::Server.new(@config.app, {port: @config.port, ssl: @config.ssl, keystore_path: @config.keystore_path, keystore_password: @config.keystore_password})
26
26
  server.start
27
27
  puts "Jubilee is listening on port #{@config.port}, press Ctrl+C to quit"
28
28
  starter = org.jruby.jubilee.deploy.Starter.new
@@ -38,6 +38,9 @@ module Jubilee
38
38
  environment: "development"
39
39
  }
40
40
  @parser = OptionParser.new do |o|
41
+ o.separator ""
42
+ o.separator "Server options:"
43
+
41
44
  #o.on "-c", "--config PATH", "Load PATH as a config file" do |arg|
42
45
  # @options[:config_file] = arg
43
46
  #end
@@ -50,15 +53,25 @@ module Jubilee
50
53
  o.on "-p", "--port PORT", "Defind which PORT the server should bind" do |arg|
51
54
  @options[:port] = arg
52
55
  end
56
+ o.on "-e", "--environment ENV", "Rack environment" do |arg|
57
+ @options[:environment] = arg
58
+ end
59
+ o.separator ""
60
+ o.separator "SSL options:"
53
61
  o.on "--ssl", "Enable SSL connection" do
54
62
  @options[:ssl] = true
55
63
  end
64
+ o.on "--ssl-keystore PATH", "SSL keystore path" do |arg|
65
+ @options[:keystore_path] = arg
66
+ end
67
+ o.on "--ssl-password PASS", "SSL keystore password" do |arg|
68
+ @options[:keystore_password] = arg
69
+ end
70
+ o.separator ""
71
+ o.separator "Common options:"
56
72
  o.on "--verbose", "Log low level debug information" do
57
73
  @options[:debug] = true
58
74
  end
59
- o.on "-e", "--environment ENV", "Rack environment" do |arg|
60
- @options[:environment] = arg
61
- end
62
75
  o.on "-q", "--quiet" do
63
76
  @options[:quiet] = true
64
77
  end
@@ -25,11 +25,14 @@ module Jubilee
25
25
  def ssl
26
26
  @options[:ssl]
27
27
  end
28
+
29
+ def keystore_path
30
+ @options[:keystore_path]
31
+ end
28
32
 
29
- #def self.load(config)
30
- # rackup_code = ::File.read(config)
31
- # eval("Rack::Builder.new {( #{rackup_code}\n )}.to_app", TOPLEVEL_BINDING, config)
32
- #end
33
+ def keystore_password
34
+ @options[:keystore_password]
35
+ end
33
36
 
34
37
  private
35
38
  def load_rack_adapter(options, &block)
@@ -45,7 +48,6 @@ module Jubilee
45
48
  end
46
49
  end
47
50
  app
48
- #Rack::Lint.new(Rack::CommonLogger.new(app, STDOUT))
49
51
  end
50
52
 
51
53
  end
Binary file
@@ -3,10 +3,10 @@ module Jubilee
3
3
  def initialize(app, opts = {})
4
4
  options = {port: 3215, ssl: false}.merge(opts)
5
5
  if (options[:ssl])
6
- if options[:keystore].nil?
6
+ if options[:keystore_path].nil?
7
7
  raise ArgumentError, "Please provide a keystore for ssl"
8
8
  else
9
- super(Application.new(app), options[:port], options[:ssl], options[:keystore], options[:keystore_password])
9
+ super(Application.new(app), options[:port], options[:ssl], options[:keystore_path], options[:keystore_password])
10
10
  end
11
11
  else
12
12
  super(Application.new(app), options[:port])
@@ -46,7 +46,7 @@ class TestJubileeServer < MiniTest::Unit::TestCase
46
46
  def test_url_scheme_for_https
47
47
  app = lambda { |env| [200, {}, [env['rack.url_scheme']]] }
48
48
  server = Jubilee::Server.new(app, {port:@port, ssl:true,
49
- keystore: File.join(File.dirname(__FILE__), "../../examples/jubilee/server-keystore.jks"),
49
+ keystore_path: File.join(File.dirname(__FILE__), "../../examples/jubilee/server-keystore.jks"),
50
50
  keystore_password: "wibble"})
51
51
  server.start
52
52
  http = Net::HTTP.new @host, @port
metadata CHANGED
@@ -2,30 +2,28 @@
2
2
  name: jubilee
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.2
5
+ version: 0.2.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Isaiah Peng
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-10 00:00:00.000000000 Z
12
+ date: 2012-12-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
16
  version_requirements: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ! '>='
18
+ - - ~>
19
19
  - !ruby/object:Gem::Version
20
- version: !binary |-
21
- MA==
20
+ version: 1.4.1
22
21
  none: false
23
22
  requirement: !ruby/object:Gem::Requirement
24
23
  requirements:
25
- - - ! '>='
24
+ - - ~>
26
25
  - !ruby/object:Gem::Version
27
- version: !binary |-
28
- MA==
26
+ version: 1.4.1
29
27
  none: false
30
28
  prerelease: false
31
29
  type: :runtime