ruby-cli-daemon 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/ruby-sli-daemon.sh +8 -4
- data/lib/ruby_cli_daemon/version.rb +1 -1
- data/lib/ruby_cli_daemon.rb +36 -5
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f8c5509e29395a1de3c0f720971cb4a645cd6c4d5801cb876eaaf224c40a699a
|
4
|
+
data.tar.gz: '0659e79f4e92b56d5a27832321d2ac7b9f40fb5c59a84391689a340661f67900'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa4a1dbf9d6ba2eb48bf9778d05dafebe699b2304b4a218d4dd935f814dd4b8a16c66256e818b0f16efa45ddb0a91a0f57865d637f990d2c30fcf17baef4683e
|
7
|
+
data.tar.gz: 97c2e4082bc8f967810738ca4790a828dec80c1c1247ebfc2012ded362d5f3332491d027db27a6ef3e917d3c13514ac46dcd76858d3a86478bded5cd688b55d6
|
data/bin/ruby-sli-daemon.sh
CHANGED
@@ -11,7 +11,7 @@ stop)
|
|
11
11
|
-v|--version)
|
12
12
|
exec ruby -r$lib/ruby_cli_daemon/version.rb -e "puts RubyCliDaemon::VERSION"
|
13
13
|
;;
|
14
|
-
|
14
|
+
""|-*)
|
15
15
|
echo "Usage:"
|
16
16
|
echo " ruby-cli-daemon <ruby-executable> [arg]*"
|
17
17
|
echo " Start or use background worker to execute command"
|
@@ -23,7 +23,11 @@ stop)
|
|
23
23
|
echo "Options:"
|
24
24
|
echo " -v / --version Show version"
|
25
25
|
echo " -h / --help Show this help"
|
26
|
-
|
26
|
+
if [[ "$1" = "-h" || "$1" = "--help" ]]; then
|
27
|
+
exit 0
|
28
|
+
else
|
29
|
+
exit 1
|
30
|
+
fi
|
27
31
|
;;
|
28
32
|
esac
|
29
33
|
|
@@ -37,10 +41,10 @@ log=${TMPDIR}ruby_cli_daemon.log
|
|
37
41
|
# spawn new daemon if none exists
|
38
42
|
if [[ ! -e $socket ]]; then
|
39
43
|
# absolute executable so a single gem install is enough for all rubies
|
40
|
-
nohup ruby -r$lib/ruby_cli_daemon.rb -
|
44
|
+
nohup ruby -r$lib/ruby_cli_daemon.rb -e RubyCliDaemon.start\ \"$socket\",\ \"$executable\" 0<&- &>$log &
|
41
45
|
while [ ! -e $socket ]; do
|
42
46
|
sleep 0.1
|
43
|
-
kill -0 $(jobs -p) || (
|
47
|
+
kill -0 $(jobs -p) &>/dev/null || (cat $log && false) # fail fast when worker failed
|
44
48
|
done
|
45
49
|
fi
|
46
50
|
|
data/lib/ruby_cli_daemon.rb
CHANGED
@@ -13,8 +13,8 @@ module RubyCliDaemon
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def start(socket, executable)
|
16
|
-
server = create_socket(socket)
|
17
16
|
path = preload_gem(executable)
|
17
|
+
server = create_socket(socket) # do this last, it signals we are ready
|
18
18
|
|
19
19
|
loop do
|
20
20
|
return unless (command = wait_for_command(server))
|
@@ -39,15 +39,46 @@ module RubyCliDaemon
|
|
39
39
|
|
40
40
|
private
|
41
41
|
|
42
|
-
# preload the libraries we'll need to speed up execution
|
42
|
+
# preload the libraries we'll need, to speed up execution
|
43
|
+
# first try with bundler and then without
|
43
44
|
def preload_gem(executable)
|
44
|
-
|
45
|
-
|
46
|
-
|
45
|
+
name, path = fork_with_return do
|
46
|
+
require "bundler/setup"
|
47
|
+
find_gem_spec(executable)
|
48
|
+
end
|
49
|
+
|
50
|
+
if name
|
51
|
+
require "bundler/setup"
|
52
|
+
else
|
53
|
+
name, path = find_gem_spec(executable)
|
54
|
+
raise "No gem with executable #{executable} found" unless name
|
55
|
+
end
|
56
|
+
|
57
|
+
require name
|
47
58
|
GC.start # https://bugs.ruby-lang.org/issues/15878
|
48
59
|
path
|
49
60
|
end
|
50
61
|
|
62
|
+
def find_gem_spec(executable)
|
63
|
+
spec = Gem::Specification.detect { |s| s.executables.include?(executable) }
|
64
|
+
[spec.name, spec.bin_file(executable)] if spec # need something we can send out from fork
|
65
|
+
end
|
66
|
+
|
67
|
+
def fork_with_return
|
68
|
+
read, write = IO.pipe
|
69
|
+
Process.wait(fork do
|
70
|
+
read.close
|
71
|
+
begin
|
72
|
+
Marshal.dump(yield, write)
|
73
|
+
rescue StandardError => e
|
74
|
+
Marshal.dump(e, write)
|
75
|
+
end
|
76
|
+
end)
|
77
|
+
write.close
|
78
|
+
result = Marshal.load(read)
|
79
|
+
result.is_a?(StandardError) ? raise(result) : result
|
80
|
+
end
|
81
|
+
|
51
82
|
def wait_for_command(server)
|
52
83
|
return unless IO.select([server], nil, nil, TIMEOUT)
|
53
84
|
connection = server.accept
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-cli-daemon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email: michael@grosser.it
|
@@ -39,8 +39,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
requirements: []
|
42
|
-
|
43
|
-
rubygems_version: 2.7.6
|
42
|
+
rubygems_version: 3.0.3
|
44
43
|
signing_key:
|
45
44
|
specification_version: 4
|
46
45
|
summary: Preforking daemon that makes all ruby binaries faster
|