ruby_wolf 0.3.0 → 0.3.1
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile +1 -1
- data/lib/ruby_wolf/cli.rb +11 -0
- data/lib/ruby_wolf/configuration.rb +3 -1
- data/lib/ruby_wolf/handler.rb +32 -15
- data/lib/ruby_wolf/logger.rb +44 -0
- data/lib/ruby_wolf/server.rb +8 -8
- data/lib/ruby_wolf/version.rb +1 -1
- data/lib/ruby_wolf/worker.rb +1 -1
- data/lib/ruby_wolf.rb +2 -9
- data/spec/ruby_wolf/cli_spec.rb +17 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1791ad834e8ba7733e34262dce2bc95d254fc653
|
4
|
+
data.tar.gz: 415e919027a607f3fe876d1e43bbd65d713aa638
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d96997f1596a88713002211c8f19847fd944577d1d66e80d8df48d14642d78a96b4dd882ac059d88747598e999139a5bca168f9bc00c0d7f38bb4a01d049305
|
7
|
+
data.tar.gz: 2d00b55807d1a798e1f4e8c944c8e449ea9fbf9b7b93f9b0e2a39b810b1acafc6ab482b74c785752cdebc52f34f6f02b86615f206c19a2d0b93f8db0e40ad274
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/lib/ruby_wolf/cli.rb
CHANGED
@@ -12,6 +12,8 @@ module RubyWolf
|
|
12
12
|
|
13
13
|
def run
|
14
14
|
parse_options
|
15
|
+
set_environment
|
16
|
+
|
15
17
|
raise 'Rack file not found' unless File.exist?(rack_file)
|
16
18
|
|
17
19
|
@server = RubyWolf::Server.new(rack_file, configs)
|
@@ -38,6 +40,10 @@ module RubyWolf
|
|
38
40
|
@configs[:worker] = arg.to_i
|
39
41
|
end
|
40
42
|
|
43
|
+
opts.on('-e ENVIRONMENT', '--environment=ENVIRONMENT', 'Current environment') do |arg|
|
44
|
+
@configs[:environment] = arg
|
45
|
+
end
|
46
|
+
|
41
47
|
opts.on('-h', '--help', 'Show the usages') do
|
42
48
|
puts opts
|
43
49
|
exit
|
@@ -52,5 +58,10 @@ module RubyWolf
|
|
52
58
|
def rack_file
|
53
59
|
"#{@app_root}/config.ru"
|
54
60
|
end
|
61
|
+
|
62
|
+
def set_environment
|
63
|
+
ENV['RAILS_ENV'] = configs[:environment]
|
64
|
+
ENV['RACK_ENV'] = configs[:environment]
|
65
|
+
end
|
55
66
|
end
|
56
67
|
end
|
@@ -4,13 +4,15 @@ module RubyWolf
|
|
4
4
|
DEFAULT_HOST = '0.0.0.0'.freeze
|
5
5
|
DEFAULT_PORT = 3000
|
6
6
|
DEFAULT_WORKER = 4
|
7
|
+
DEFAULT_ENVIRONMENT = 'development'.freeze
|
7
8
|
|
8
9
|
def initialize
|
9
10
|
@configs = {
|
10
11
|
daemon: DEFAULT_DAEMON,
|
11
12
|
worker: DEFAULT_WORKER,
|
12
13
|
host: DEFAULT_HOST,
|
13
|
-
port: DEFAULT_PORT
|
14
|
+
port: DEFAULT_PORT,
|
15
|
+
environment: DEFAULT_ENVIRONMENT
|
14
16
|
}
|
15
17
|
end
|
16
18
|
|
data/lib/ruby_wolf/handler.rb
CHANGED
@@ -3,7 +3,7 @@ require 'http/parser'
|
|
3
3
|
module RubyWolf
|
4
4
|
class Handler
|
5
5
|
|
6
|
-
attr_reader :app, :env, :connection, :response, :callback
|
6
|
+
attr_reader :app, :env, :connection, :response, :callback, :body, :headers, :status
|
7
7
|
|
8
8
|
def initialize(app, connection, &callback)
|
9
9
|
@app = app
|
@@ -47,25 +47,16 @@ module RubyWolf
|
|
47
47
|
|
48
48
|
'rack.input' => StringIO.new(connection.read_chunk)
|
49
49
|
)
|
50
|
-
|
51
|
-
RubyWolf.log(
|
52
|
-
[
|
53
|
-
'HTTP/1.1',
|
54
|
-
connection.method,
|
55
|
-
"#{connection.path}?#{connection.query}"
|
56
|
-
].join(' ')
|
57
|
-
)
|
50
|
+
log_request
|
58
51
|
end
|
59
52
|
|
60
53
|
def generate_response
|
61
|
-
status, headers, body = app.call(env)
|
62
|
-
|
63
|
-
|
64
|
-
)
|
65
|
-
compose_response(status, headers, body)
|
54
|
+
@status, @headers, @body = app.call(env)
|
55
|
+
compose_response
|
56
|
+
log_response
|
66
57
|
end
|
67
58
|
|
68
|
-
def compose_response
|
59
|
+
def compose_response
|
69
60
|
@response += "HTTP/1.1 #{status} #{RubyWolf::CRLF}"
|
70
61
|
headers.each do |key, value|
|
71
62
|
@response += "#{key}: #{value}#{RubyWolf::CRLF}"
|
@@ -78,5 +69,31 @@ module RubyWolf
|
|
78
69
|
ensure
|
79
70
|
body.close if body.respond_to? :close
|
80
71
|
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def log_request
|
76
|
+
RubyWolf.logger.info(
|
77
|
+
[
|
78
|
+
'HTTP/1.1',
|
79
|
+
connection.method,
|
80
|
+
request_path
|
81
|
+
].join(' ')
|
82
|
+
)
|
83
|
+
end
|
84
|
+
|
85
|
+
def log_response
|
86
|
+
RubyWolf.logger.info(
|
87
|
+
"Response HTTP/1.1 #{status}"
|
88
|
+
)
|
89
|
+
end
|
90
|
+
|
91
|
+
def request_path
|
92
|
+
if connection.query
|
93
|
+
"#{connection.path}?#{connection.query}"
|
94
|
+
else
|
95
|
+
connection.path
|
96
|
+
end
|
97
|
+
end
|
81
98
|
end
|
82
99
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'logger'
|
2
|
+
|
3
|
+
module RubyWolf
|
4
|
+
class Logger < ::Logger
|
5
|
+
def info(contents = "")
|
6
|
+
pre_process(contents) do |content|
|
7
|
+
super(content)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def warn(contents = "")
|
12
|
+
pre_process(contents) do |content|
|
13
|
+
super(content)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def debug(contents = "")
|
18
|
+
pre_process(contents) do |content|
|
19
|
+
super(content)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def error(contents = "")
|
24
|
+
pre_process(contents) do |content|
|
25
|
+
super(content)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def fatal(contents = "")
|
30
|
+
pre_process(contents) do |content|
|
31
|
+
super(content)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def pre_process(contents)
|
38
|
+
object = Process.pid == MAIN_PID ? '[Main]' : "[Worker #{Process.pid}]"
|
39
|
+
contents.to_s.split("\n").each do |line|
|
40
|
+
yield("#{object} #{line}")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/ruby_wolf/server.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'logger'
|
2
|
-
|
3
1
|
module RubyWolf
|
4
2
|
class Server
|
5
3
|
attr_reader :app, :configs, :socket, :workers
|
@@ -25,16 +23,18 @@ module RubyWolf
|
|
25
23
|
private
|
26
24
|
|
27
25
|
def setup_rack
|
28
|
-
RubyWolf.
|
29
|
-
RubyWolf.
|
26
|
+
RubyWolf.logger.info('~~~ Ruby Wolf ~~~')
|
27
|
+
RubyWolf.logger.info('Loading Rack application')
|
30
28
|
@app, _rack_options = ::Rack::Builder.parse_file(@rack_file)
|
29
|
+
Rails.logger = RubyWolf.logger if defined?(Rails)
|
30
|
+
ActiveRecord::Base.logger = RubyWolf.logger if defined?(ActiveRecord)
|
31
31
|
end
|
32
32
|
|
33
33
|
def setup_socket
|
34
34
|
@socket = TCPServer.new(configs[:host], configs[:port])
|
35
|
-
RubyWolf.
|
36
|
-
RubyWolf.
|
37
|
-
RubyWolf.
|
35
|
+
RubyWolf.logger.info("Server is running on #{configs[:host]}:#{configs[:port]}")
|
36
|
+
RubyWolf.logger.info("Process pid is #{Process.pid}")
|
37
|
+
RubyWolf.logger.info("Number of worker: #{configs[:worker]}")
|
38
38
|
end
|
39
39
|
|
40
40
|
def handle_loop
|
@@ -42,7 +42,7 @@ module RubyWolf
|
|
42
42
|
stopped_worker = workers.find { |w| w.pid == stopped_pid }
|
43
43
|
next unless stopped_worker
|
44
44
|
|
45
|
-
RubyWolf.
|
45
|
+
RubyWolf.logger.info("Worker with pid #{stopped_pid} suddenly stopped", :error)
|
46
46
|
|
47
47
|
sleep(1)
|
48
48
|
worker = RubyWolf::Worker.new(self)
|
data/lib/ruby_wolf/version.rb
CHANGED
data/lib/ruby_wolf/worker.rb
CHANGED
data/lib/ruby_wolf.rb
CHANGED
@@ -2,6 +2,7 @@ require 'byebug'
|
|
2
2
|
require 'rack'
|
3
3
|
|
4
4
|
require 'ruby_wolf/version'
|
5
|
+
require 'ruby_wolf/logger'
|
5
6
|
require 'ruby_wolf/configuration'
|
6
7
|
require 'ruby_wolf/connection'
|
7
8
|
require 'ruby_wolf/handler'
|
@@ -16,14 +17,6 @@ module RubyWolf
|
|
16
17
|
READ_SIZE = 16 * 1024
|
17
18
|
|
18
19
|
def self.logger
|
19
|
-
@logger ||= Logger.new(STDOUT)
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.log(content, mode = :info)
|
23
|
-
contents = content.to_s.split("\n")
|
24
|
-
object = Process.pid == MAIN_PID ? '[Main]' : "[Worker #{Process.pid}]"
|
25
|
-
contents.each do |line|
|
26
|
-
logger.send(mode, "#{object} #{line}")
|
27
|
-
end
|
20
|
+
@logger ||= RubyWolf::Logger.new(STDOUT)
|
28
21
|
end
|
29
22
|
end
|
data/spec/ruby_wolf/cli_spec.rb
CHANGED
@@ -111,5 +111,22 @@ describe RubyWolf::CLI do
|
|
111
111
|
it { expect(cli.configs[:port]).to eql(20) }
|
112
112
|
end
|
113
113
|
end
|
114
|
+
|
115
|
+
describe 'environment option' do
|
116
|
+
context 'default environment' do
|
117
|
+
let(:args) { [] }
|
118
|
+
it { expect(cli.configs[:environment]).to eql('development') }
|
119
|
+
end
|
120
|
+
|
121
|
+
context 'short form' do
|
122
|
+
let(:args) { ['-w production'] }
|
123
|
+
it { expect(cli.configs[:environment]).to eql('production') }
|
124
|
+
end
|
125
|
+
|
126
|
+
context 'full form' do
|
127
|
+
let(:args) { ['--environment=20'] }
|
128
|
+
it { expect(cli.configs[:environment]).to eql('production') }
|
129
|
+
end
|
130
|
+
end
|
114
131
|
end
|
115
132
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_wolf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nguyễn Quang Minh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- lib/ruby_wolf/configuration.rb
|
94
94
|
- lib/ruby_wolf/connection.rb
|
95
95
|
- lib/ruby_wolf/handler.rb
|
96
|
+
- lib/ruby_wolf/logger.rb
|
96
97
|
- lib/ruby_wolf/server.rb
|
97
98
|
- lib/ruby_wolf/version.rb
|
98
99
|
- lib/ruby_wolf/worker.rb
|