heroku-forward 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2012 Daniel Doubrovkine, Art.sy Inc.
3
+ Copyright (c) 2012-2013 Daniel Doubrovkine, Artsy Inc.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- Heroku::Forward [![Build Status](https://travis-ci.org/dblock/heroku-forward.png?branch=master)](https://travis-ci.org/dblock/heroku-forward)
1
+ Heroku::Forward [![Build Status](https://travis-ci.org/dblock/heroku-forward.png?branch=master)](https://travis-ci.org/dblock/heroku-forward) [![Code Climate](https://codeclimate.com/repos/51fa634ec7f3a32cbd015aea/badges/f526a1ee8e357011f8af/gpa.png)](https://codeclimate.com/repos/51fa634ec7f3a32cbd015aea/feed)
2
2
  ===============
3
3
 
4
4
  Beat Heroku's 60 seconds timeout with a proxy.
@@ -52,6 +52,12 @@ proxy.forward!
52
52
 
53
53
  This sets up a proxy on the port requested by Heroku and runs your application with [Thin](http://code.macournoyer.com/thin). Other back-ends are also supported, see below.
54
54
 
55
+ Add the following line to `config/development.rb` to see Rails logger output on `STDOUT`:
56
+
57
+ ```ruby
58
+ config.middleware.use Rails::Rack::LogTailer
59
+ ```
60
+
55
61
  Foreman
56
62
  -------
57
63
 
@@ -153,6 +159,30 @@ proxy = Heroku::Forward::Proxy::Server.new(backend, host: '0.0.0.0', port: port)
153
159
  proxy.forward!
154
160
  ```
155
161
 
162
+ ### Puma
163
+
164
+ For more information about Puma see [http://puma.io](http://puma.io/).
165
+
166
+ The Puma back-end supports the following options.
167
+
168
+ * **application**: application to load
169
+ * **env**: environment, eg. `:development`
170
+ * **socket**: socket, eg. `/tmp/puma.sock`
171
+ * **config_file**: Puma configuration file
172
+
173
+ ```ruby
174
+ require 'heroku-forward'
175
+ require 'heroku/forward/backends/puma'
176
+
177
+ application = File.expand_path('../my_app.ru', __FILE__)
178
+ config_file = File.expand_path('../config/puma.rb', __FILE__)
179
+ backend = Heroku::Forward::Backends::Puma.new(application: application, env: env, config_file: config_file)
180
+ proxy = Heroku::Forward::Proxy::Server.new(backend, host: '0.0.0.0', port: port)
181
+ proxy.forward!
182
+ ```
183
+
184
+ Note that heroku-forward does not currently run on JRuby, see [em-proxy#39](https://github.com/igrigorik/em-proxy/issues/39) for details.
185
+
156
186
  Fail-Safe
157
187
  ---------
158
188
 
@@ -178,4 +208,4 @@ Copyright and License
178
208
 
179
209
  MIT License, see [LICENSE](http://github.com/dblock/heroku-forward/raw/master/LICENSE.md) for details.
180
210
 
181
- (c) 2012 [Daniel Doubrovkine](http://github.com/dblock), [Art.sy](http://artsy.github.com)
211
+ (c) 2012-2013 [Daniel Doubrovkine](http://github.com/dblock), [Artsy](http://artsy.github.com)
@@ -0,0 +1,27 @@
1
+ module Heroku
2
+ module Forward
3
+ module Backends
4
+ class Base
5
+ attr_accessor :application, :socket, :environment, :pid
6
+
7
+ def terminate!
8
+ return false unless spawned?
9
+ Process.kill 'QUIT', @pid
10
+ @spawned = false
11
+ true
12
+ end
13
+
14
+ def spawned?
15
+ !!@spawned
16
+ end
17
+
18
+ private
19
+
20
+ def check!
21
+ raise Heroku::Forward::Errors::MissingBackendOptionError.new('application') unless @application && @application.length > 0
22
+ raise Heroku::Forward::Errors::MissingBackendApplicationError.new(@application) unless File.exists?(@application)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,50 @@
1
+ require 'heroku/forward/backends/base'
2
+
3
+ module Heroku
4
+ module Forward
5
+ module Backends
6
+ class Puma < Base
7
+ attr_accessor :config_file
8
+
9
+ def initialize(options = {})
10
+ @application = options[:application]
11
+ @socket = options[:socket] || Heroku::Forward::Utils::Dir.tmp_filename('puma-', '.sock')
12
+ @env = options[:env] || 'development'
13
+ @config_file = options[:config_file]
14
+ end
15
+
16
+ def spawn!
17
+ return false if spawned?
18
+ check!
19
+
20
+ args = ['puma']
21
+ args.push '--environment', @env
22
+ args.push '--config', @config_file if @config_file
23
+ args.push '--bind', "unix://#{@socket}"
24
+ args.push @application
25
+
26
+ @pid = Spoon.spawnp(*args)
27
+ @spawned = true
28
+ end
29
+
30
+ def terminate!
31
+ return false unless spawned?
32
+ Process.kill 'QUIT', @pid
33
+ @spawned = false
34
+ true
35
+ end
36
+
37
+ def spawned?
38
+ !!@spawned
39
+ end
40
+
41
+ private
42
+
43
+ def check!
44
+ raise Heroku::Forward::Errors::MissingBackendOptionError.new('application') unless @application && @application.length > 0
45
+ raise Heroku::Forward::Errors::MissingBackendApplicationError.new(@application) unless File.exists?(@application)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,12 +1,9 @@
1
+ require 'heroku/forward/backends/base'
2
+
1
3
  module Heroku
2
4
  module Forward
3
5
  module Backends
4
- class Thin
5
- attr_accessor :application
6
- attr_accessor :socket
7
- attr_accessor :environment
8
- attr_accessor :pid
9
-
6
+ class Thin < Base
10
7
  attr_accessor :ssl
11
8
  attr_accessor :ssl_key_file
12
9
  attr_accessor :ssl_cert_file
@@ -48,25 +45,6 @@ module Heroku
48
45
  @pid = Spoon.spawnp(* spawn_with)
49
46
  @spawned = true
50
47
  end
51
-
52
- def terminate!
53
- return false unless spawned?
54
- Process.kill 'QUIT', @pid
55
- @spawned = false
56
- true
57
- end
58
-
59
- def spawned?
60
- !! @spawned
61
- end
62
-
63
- private
64
-
65
- def check!
66
- raise Heroku::Forward::Errors::MissingBackendOptionError.new('application') unless @application && @application.length > 0
67
- raise Heroku::Forward::Errors::MissingBackendApplicationError.new(@application) unless File.exists?(@application)
68
- end
69
-
70
48
  end
71
49
  end
72
50
  end
@@ -1,8 +1,10 @@
1
+ require 'heroku/forward/backends/base'
2
+
1
3
  module Heroku
2
4
  module Forward
3
5
  module Backends
4
- class Unicorn
5
- attr_accessor :application, :socket, :environment, :pid, :config_file
6
+ class Unicorn < Base
7
+ attr_accessor :config_file
6
8
 
7
9
  def initialize(options = {})
8
10
  @application = options[:application]
@@ -24,25 +26,6 @@ module Heroku
24
26
  @pid = Spoon.spawnp(*args)
25
27
  @spawned = true
26
28
  end
27
-
28
- def terminate!
29
- return false unless spawned?
30
- Process.kill 'QUIT', @pid
31
- @spawned = false
32
- true
33
- end
34
-
35
- def spawned?
36
- !!@spawned
37
- end
38
-
39
- private
40
-
41
- def check!
42
- raise Heroku::Forward::Errors::MissingBackendOptionError.new('application') unless @application && @application.length > 0
43
- raise Heroku::Forward::Errors::MissingBackendApplicationError.new(@application) unless File.exists?(@application)
44
- end
45
-
46
29
  end
47
30
  end
48
31
  end
@@ -84,7 +84,7 @@ module Heroku
84
84
  @start = nil
85
85
  end
86
86
  rescue RuntimeError => e
87
- raise BackendFailedToStartError.new if @retries <= 0
87
+ raise Heroku::Forward::Errors::BackendFailedToStartError.new if @retries <= 0
88
88
  logger.warn "#{e.message}, #{retries} #{retries == 1 ? 'retry' : 'retries'} left." if logger
89
89
  @retries -= 1
90
90
  end
@@ -1,5 +1,5 @@
1
1
  module Heroku
2
2
  module Forward
3
- VERSION = '0.3.1'
3
+ VERSION = '0.4.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: heroku-forward
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-25 00:00:00.000000000 Z
12
+ date: 2013-08-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: em-proxy
@@ -171,6 +171,22 @@ dependencies:
171
171
  - - ~>
172
172
  - !ruby/object:Gem::Version
173
173
  version: '4.5'
174
+ - !ruby/object:Gem::Dependency
175
+ name: puma
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ~>
180
+ - !ruby/object:Gem::Version
181
+ version: '1.6'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ~>
188
+ - !ruby/object:Gem::Version
189
+ version: '1.6'
174
190
  - !ruby/object:Gem::Dependency
175
191
  name: em-http-request
176
192
  requirement: !ruby/object:Gem::Requirement
@@ -198,6 +214,8 @@ files:
198
214
  - lib/heroku-forward.rb
199
215
  - lib/heroku/forward.rb
200
216
  - lib/heroku/forward/backends.rb
217
+ - lib/heroku/forward/backends/base.rb
218
+ - lib/heroku/forward/backends/puma.rb
201
219
  - lib/heroku/forward/backends/thin.rb
202
220
  - lib/heroku/forward/backends/unicorn.rb
203
221
  - lib/heroku/forward/config/locales/en.yml
@@ -227,7 +245,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
227
245
  version: '0'
228
246
  segments:
229
247
  - 0
230
- hash: 669463106192419404
248
+ hash: 470077483543450957
231
249
  required_rubygems_version: !ruby/object:Gem::Requirement
232
250
  none: false
233
251
  requirements:
@@ -236,7 +254,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
236
254
  version: '0'
237
255
  requirements: []
238
256
  rubyforge_project:
239
- rubygems_version: 1.8.24
257
+ rubygems_version: 1.8.25
240
258
  signing_key:
241
259
  specification_version: 3
242
260
  summary: Beat Heroku's 60s boot timeout with a forward proxy.