subcontractor 0.0.1 → 0.1.0
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.
- data/README.md +44 -0
- data/examples/Procfile +2 -1
- data/lib/subcontractor/cli.rb +8 -3
- data/lib/subcontractor/version.rb +1 -1
- metadata +4 -4
data/README.md
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
### Overview
|
2
|
+
|
3
|
+
[Foreman](https://github.com/ddollar/foreman) is a gem released by Heroku that allows you to easily manage multiple processes with a Procfile. It ensures all processes launch successfully, colorizes output, and allows you to kill all processes with a simple CTL+C. It's simple and elegant.
|
4
|
+
|
5
|
+
Its not perfect however. For one, it doesn't handle running processes from a different directory. It also doesn't deal well with the complexity of running processes under a different RVM. You are probably thinking, "well, those aren't really Foreman's responsibilities". I agree with you. This gem fills that gap.
|
6
|
+
|
7
|
+
### Usage
|
8
|
+
|
9
|
+
```
|
10
|
+
gem install subcontractor
|
11
|
+
```
|
12
|
+
|
13
|
+
or with bundler
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
gem 'subcontractor', '0.1.0'
|
17
|
+
```
|
18
|
+
|
19
|
+
The gem provides an executable called ```subcontract``` that you will use from your Procfile. You can see what it does by running ```subcontract --help```
|
20
|
+
|
21
|
+
```
|
22
|
+
USAGE: subcontract [options] -- executable
|
23
|
+
-r, --rvm RVM run in a specific RVM
|
24
|
+
-d, --chdir PATH chdir to PATH before starting process
|
25
|
+
-s, --signal SIGNAL signal to send to process to kill it, default TERM
|
26
|
+
```
|
27
|
+
|
28
|
+
An example Procfile tells the story
|
29
|
+
|
30
|
+
```
|
31
|
+
rails: rails s
|
32
|
+
another_app: subcontract --rvm ruby-1.8.7-p249@another_app --chdir ../another_app --signal INT -- rails s -p 3001
|
33
|
+
```
|
34
|
+
|
35
|
+
Here another_app will be launch from the sibling directory another_app and will use the rvm ruby-1.8.7-p249@another_app. As you can see, the command that we wish to use to launch our application follows the double dashes (--).
|
36
|
+
|
37
|
+
### Contributions
|
38
|
+
* Fork the project
|
39
|
+
* Make your change
|
40
|
+
* Add your name and contact info the the Contributors section below
|
41
|
+
* Send a pull request (bonus points for feature branches)
|
42
|
+
|
43
|
+
### Contributors
|
44
|
+
* Tony Pitluga [github](http://github.com/pitluga) [twitter](http://twitter.com/pitluga)
|
data/examples/Procfile
CHANGED
@@ -1,2 +1,3 @@
|
|
1
|
-
|
1
|
+
thin: ruby -I ../lib ../bin/subcontract --rvm ruby-1.8.7-p249@subcontractor-webapp --chdir webapp --signal INT -- bundle exec rackup config.ru -p 3001
|
2
|
+
webrick: ruby -I ../lib ../bin/subcontract --rvm ruby-1.8.7-p249@subcontractor-webapp --chdir webapp --signal INT -- bundle exec thin --rackup config.ru -p 3002 start
|
2
3
|
sleepy: ruby -I ../lib ../bin/subcontract --chdir script -- ruby sleepy.rb
|
data/lib/subcontractor/cli.rb
CHANGED
@@ -8,9 +8,10 @@ module Subcontractor
|
|
8
8
|
options = parse_options(ARGV)
|
9
9
|
command = build_command(ARGV.dup, options)
|
10
10
|
Dir.chdir(options[:chdir]) if options[:chdir]
|
11
|
+
signal = options[:signal] || "TERM"
|
11
12
|
PTY.spawn(command) do |stdin, stdout, pid|
|
12
13
|
trap("TERM") do
|
13
|
-
options.has_key?(:rvm) ?
|
14
|
+
options.has_key?(:rvm) ? send_kill(signal, *child_pids(pid)) : send_kill(signal, pid)
|
14
15
|
end
|
15
16
|
until stdin.eof?
|
16
17
|
puts stdin.gets
|
@@ -18,8 +19,8 @@ module Subcontractor
|
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
21
|
-
def
|
22
|
-
pids.each { |pid| Process.kill(
|
22
|
+
def send_kill(signal, *pids)
|
23
|
+
pids.each { |pid| Process.kill(signal, pid) }
|
23
24
|
end
|
24
25
|
|
25
26
|
def child_pids(pid)
|
@@ -37,12 +38,16 @@ module Subcontractor
|
|
37
38
|
def parse_options(argv)
|
38
39
|
options = {}
|
39
40
|
parser = OptionParser.new do |opt|
|
41
|
+
opt.banner = "USAGE: subcontract [options] -- executable"
|
40
42
|
opt.on('-r', '--rvm RVM', 'run in a specific RVM') do |rvm|
|
41
43
|
options[:rvm] = rvm
|
42
44
|
end
|
43
45
|
opt.on('-d', '--chdir PATH', 'chdir to PATH before starting process') do |path|
|
44
46
|
options[:chdir] = path
|
45
47
|
end
|
48
|
+
opt.on('-s', '--signal SIGNAL', 'signal to send to process to kill it, default TERM') do |signal|
|
49
|
+
options[:signal] = signal
|
50
|
+
end
|
46
51
|
end
|
47
52
|
|
48
53
|
parser.parse! argv
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: subcontractor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
- 0
|
9
8
|
- 1
|
10
|
-
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tony Pitluga
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-10-
|
18
|
+
date: 2011-10-12 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: foreman
|