theine 0.0.10 → 0.0.11
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/lib/theine/client.rb +13 -7
- data/lib/theine/server.rb +1 -1
- data/lib/theine/worker.rb +75 -42
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d99c6739774edb55cc9b94d1a9188207569e942
|
4
|
+
data.tar.gz: a207395e8d396715f78fb45820c6b7e05894ca85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4c0f716db657abe2e2eee2e7a9869be61f6364910d4cc9c1ae2125436f2c831c79fe94f957d8795b8bc60c7ce16c371e7af86d0e9f09e3453d69a6b040c1481
|
7
|
+
data.tar.gz: 5482ddfff27f95cbf9ce72d18a0190d16f1d7219295f9be116094b7786a7e66547f3acce1dee00d4edcd9a17e05b18225eab1bc3003738c07f58518315f4dff7
|
data/lib/theine/client.rb
CHANGED
@@ -23,19 +23,25 @@ module Theine
|
|
23
23
|
|
24
24
|
private
|
25
25
|
def attach_screen
|
26
|
-
|
26
|
+
# Using vt100 because it does not have smcup/rmcup support,
|
27
|
+
# which means the output of the screen will stay shown after
|
28
|
+
# screen closes.
|
29
|
+
set_vt_100 = "export TERM=vt100; tset"
|
30
|
+
erase_screen_message = "echo '\\033[2A\\033[K'"
|
31
|
+
exec("#{set_vt_100}; screen -r theine#{@port}; #{erase_screen_message}")
|
27
32
|
end
|
28
33
|
|
29
34
|
def run_command
|
30
|
-
|
35
|
+
argv = @argv.dup
|
36
|
+
command = argv.shift
|
37
|
+
|
38
|
+
case command
|
31
39
|
when "rake"
|
32
|
-
@argv
|
33
|
-
@worker.command_rake(@argv)
|
40
|
+
@worker.command_rake(argv)
|
34
41
|
when "rspec"
|
35
|
-
@argv
|
36
|
-
@worker.command_rspec(@argv)
|
42
|
+
@worker.command_rspec(argv)
|
37
43
|
else
|
38
|
-
@worker.command_rails(
|
44
|
+
@worker.command_rails([command] + argv)
|
39
45
|
end
|
40
46
|
rescue DRb::DRbConnError
|
41
47
|
$stderr.puts "\nTheine closed the connection."
|
data/lib/theine/server.rb
CHANGED
@@ -29,7 +29,7 @@ module Theine
|
|
29
29
|
puts "(spawn #{port})"
|
30
30
|
spawn("screen", "-d", "-m", "-S", worker_session_name(port),
|
31
31
|
"sh", "-c",
|
32
|
-
"ruby #{path} #{config.base_port.to_s} #{port.to_s} #{config.rails_root}
|
32
|
+
"ruby #{path} #{config.base_port.to_s} #{port.to_s} #{config.rails_root}")
|
33
33
|
@workers_mutex.synchronize { @spawning_workers << port }
|
34
34
|
end
|
35
35
|
|
data/lib/theine/worker.rb
CHANGED
@@ -4,40 +4,48 @@ require 'drb/drb'
|
|
4
4
|
|
5
5
|
module Theine
|
6
6
|
class Worker
|
7
|
-
attr_reader :
|
7
|
+
attr_reader :port, :balancer
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
@command_proc = proc { }
|
12
|
-
end
|
13
|
-
|
14
|
-
def boot
|
15
|
-
require "#{RAILS_ROOT_PATH}/config/boot"
|
16
|
-
require "#{RAILS_ROOT_PATH}/config/environment"
|
17
|
-
end
|
18
|
-
|
19
|
-
def command_rails(argv)
|
20
|
-
ARGV.clear
|
21
|
-
ARGV.concat(argv)
|
22
|
-
|
23
|
-
set_command do
|
9
|
+
COMMANDS = {
|
10
|
+
rails: proc {
|
24
11
|
require 'rails/commands'
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
def command_rake(argv)
|
29
|
-
set_command do
|
12
|
+
},
|
13
|
+
rake: proc {
|
30
14
|
::Rails.application.load_tasks
|
31
15
|
argv.each do |task|
|
32
16
|
::Rake::Task[task].invoke
|
33
17
|
end
|
18
|
+
},
|
19
|
+
rspec: proc {
|
20
|
+
require 'rspec/core'
|
21
|
+
RSpec::Core::Runner.autorun
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
def initialize(port, balancer)
|
26
|
+
@port = port
|
27
|
+
@balancer = balancer
|
28
|
+
@command_proc = proc { }
|
29
|
+
end
|
30
|
+
|
31
|
+
def run
|
32
|
+
boot
|
33
|
+
begin
|
34
|
+
DRb.thread.join
|
35
|
+
screen_move_to_bottom
|
36
|
+
sleep 0.1 while !screen_attached?
|
37
|
+
|
38
|
+
puts "command: #{@command_name} #{argv_to_s}"
|
39
|
+
@command_proc.call
|
40
|
+
ensure
|
41
|
+
balancer.worker_done(port)
|
34
42
|
end
|
35
43
|
end
|
36
44
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
45
|
+
COMMANDS.each_pair do |command_name, command|
|
46
|
+
define_method("command_#{command_name}") do |argv|
|
47
|
+
set_argv(argv)
|
48
|
+
set_command(command_name, &command)
|
41
49
|
end
|
42
50
|
end
|
43
51
|
|
@@ -48,35 +56,60 @@ module Theine
|
|
48
56
|
def stop!
|
49
57
|
exit(1)
|
50
58
|
end
|
59
|
+
|
60
|
+
def screen_attached?
|
61
|
+
!system("screen -ls | grep theine#{@port} | grep Detached > /dev/null")
|
62
|
+
end
|
63
|
+
|
64
|
+
def screen_move_to_bottom
|
65
|
+
puts "\033[22B"
|
66
|
+
end
|
67
|
+
|
51
68
|
private
|
52
|
-
def set_command(&block)
|
69
|
+
def set_command(command_name, &block)
|
53
70
|
rails_reload!
|
71
|
+
@command_name = command_name
|
54
72
|
@command_proc = block
|
55
73
|
DRb.stop_service
|
56
74
|
end
|
57
75
|
|
76
|
+
def argv_to_s
|
77
|
+
ARGV.map { |arg|
|
78
|
+
if arg.include?(" ")
|
79
|
+
"\"#{arg}\""
|
80
|
+
else
|
81
|
+
arg
|
82
|
+
end
|
83
|
+
}.join(' ')
|
84
|
+
end
|
85
|
+
|
86
|
+
def set_argv(argv)
|
87
|
+
ARGV.clear
|
88
|
+
ARGV.concat(argv)
|
89
|
+
end
|
90
|
+
|
58
91
|
def rails_reload!
|
59
92
|
ActionDispatch::Reloader.cleanup!
|
60
93
|
ActionDispatch::Reloader.prepare!
|
61
94
|
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
base_port = ARGV[0]
|
66
|
-
worker_port = ARGV[1].to_i
|
67
95
|
|
68
|
-
|
96
|
+
def start_service
|
97
|
+
DRb.start_service("druby://localhost:#{@port}", self)
|
98
|
+
end
|
69
99
|
|
70
|
-
|
71
|
-
balancer.set_worker_pid(
|
100
|
+
def boot
|
101
|
+
balancer.set_worker_pid(port, pid)
|
72
102
|
|
73
|
-
|
74
|
-
|
75
|
-
|
103
|
+
require "#{RAILS_ROOT_PATH}/config/boot"
|
104
|
+
require "#{RAILS_ROOT_PATH}/config/environment"
|
105
|
+
start_service
|
76
106
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
ensure
|
81
|
-
balancer.worker_done(worker_port)
|
107
|
+
balancer.worker_boot(port)
|
108
|
+
end
|
109
|
+
end
|
82
110
|
end
|
111
|
+
|
112
|
+
balancer = DRbObject.new_with_uri("druby://localhost:#{ARGV[0]}")
|
113
|
+
worker = Theine::Worker.new(ARGV[1].to_i, balancer)
|
114
|
+
|
115
|
+
worker.run
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: theine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Berdajs
|
@@ -63,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
63
|
version: '0'
|
64
64
|
requirements: []
|
65
65
|
rubyforge_project:
|
66
|
-
rubygems_version: 2.0.
|
66
|
+
rubygems_version: 2.0.4
|
67
67
|
signing_key:
|
68
68
|
specification_version: 4
|
69
69
|
summary: Theine
|