spork_tasks 1.0.0 → 1.1.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.
- data/Gemfile +3 -0
- data/Gemfile.lock +28 -0
- data/README.md +9 -13
- data/lib/spork/task_helper.rb +148 -0
- data/lib/spork/tasks.rb +2 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/task_spec.rb +21 -0
- data/spork_tasks.gemspec +6 -1
- metadata +64 -6
- data/lib/rails/generators/spork_tasks/spork.rake +0 -108
- data/lib/rails/generators/spork_tasks/spork_tasks_generator.rb +0 -10
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
spork_tasks (1.1.1)
|
5
|
+
rake
|
6
|
+
spork
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
diff-lcs (1.2.5)
|
12
|
+
rake (10.1.1)
|
13
|
+
rspec (2.14.1)
|
14
|
+
rspec-core (~> 2.14.0)
|
15
|
+
rspec-expectations (~> 2.14.0)
|
16
|
+
rspec-mocks (~> 2.14.0)
|
17
|
+
rspec-core (2.14.7)
|
18
|
+
rspec-expectations (2.14.5)
|
19
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
20
|
+
rspec-mocks (2.14.5)
|
21
|
+
spork (0.9.2)
|
22
|
+
|
23
|
+
PLATFORMS
|
24
|
+
ruby
|
25
|
+
|
26
|
+
DEPENDENCIES
|
27
|
+
rspec
|
28
|
+
spork_tasks!
|
data/README.md
CHANGED
@@ -1,24 +1,23 @@
|
|
1
1
|
Spork Tasks
|
2
2
|
===========
|
3
|
-
|
4
|
-
|
5
|
-
You can copy the rake tasks wherever you like, but I've packaged them as a rails generator
|
3
|
+
Run spork in the background! Provides rake tasks for an easy way to start, stop, restart spork.
|
6
4
|
|
7
5
|
Installing
|
8
6
|
----------
|
9
7
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
rails generate spork_tasks
|
16
|
-
# Copies the rake file for you.
|
8
|
+
# In your Gemfile:
|
9
|
+
gem 'spork_tasks', '~> 1.1.0'
|
10
|
+
|
11
|
+
# Add the following line to your Rakefile
|
12
|
+
require 'spork/tasks'
|
17
13
|
|
18
14
|
Tasks
|
19
15
|
-----
|
20
16
|
rake spork:start
|
21
17
|
# Starts the server
|
18
|
+
|
19
|
+
rake spork:start[5678]
|
20
|
+
# Starts spork on port 5768
|
22
21
|
|
23
22
|
rake spork:stop
|
24
23
|
# Stops the server
|
@@ -26,6 +25,3 @@ Tasks
|
|
26
25
|
rake spork:restart
|
27
26
|
# Restarts spork
|
28
27
|
|
29
|
-
TODO
|
30
|
-
----
|
31
|
-
Better process management. Instead of guessing how long to wait (and sleep) for Rails to start, actually wait for it to start before handing the command line back.
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require 'spork'
|
2
|
+
require 'spork/runner'
|
3
|
+
require 'rake'
|
4
|
+
require 'socket'
|
5
|
+
require 'timeout'
|
6
|
+
|
7
|
+
# Let's fork spork and put in the background and forget about it.
|
8
|
+
# You can start|stop|restart spork using this rake task
|
9
|
+
#
|
10
|
+
# Examples
|
11
|
+
#
|
12
|
+
# rake spork:start
|
13
|
+
# # => starts spork and detaches the process
|
14
|
+
#
|
15
|
+
# rake spork:stop
|
16
|
+
# # => kills the spork process based on the pid stored in tmp/spork.pid
|
17
|
+
#
|
18
|
+
# rake spork:restart
|
19
|
+
# # => stops then starts spork
|
20
|
+
#
|
21
|
+
|
22
|
+
module Spork
|
23
|
+
class TaskHelper
|
24
|
+
|
25
|
+
include Rake::DSL if defined? Rake::DSL
|
26
|
+
|
27
|
+
def install
|
28
|
+
namespace :spork do
|
29
|
+
desc "Start spork server"
|
30
|
+
task :start, :port do |_, args|
|
31
|
+
port = args[:port]
|
32
|
+
start_spork(port)
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "Stop spork server"
|
36
|
+
task :stop do
|
37
|
+
stop_spork
|
38
|
+
end
|
39
|
+
|
40
|
+
desc "Restart spork server"
|
41
|
+
task :restart => [:stop, :start]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def start_spork(port = nil)
|
46
|
+
options = []
|
47
|
+
options << "-p#{port}" if port
|
48
|
+
runner = Spork::Runner.new(options, $stderr, $stderr)
|
49
|
+
port = port || runner.find_test_framework.default_port
|
50
|
+
|
51
|
+
if port_bound?(port) || process_running?
|
52
|
+
puts "\033[33m[Spork already running on port #{port}]\033[0m"
|
53
|
+
return
|
54
|
+
end
|
55
|
+
|
56
|
+
begin
|
57
|
+
pid = fork do
|
58
|
+
$stdout = File.new('/dev/null', 'w')
|
59
|
+
begin
|
60
|
+
runner.run
|
61
|
+
rescue => e
|
62
|
+
$stderr.puts
|
63
|
+
$stderr.puts "#{e.class} => #{e.message}"
|
64
|
+
$stderr.puts e.backtrace.join("\n")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# Detach the pid, keep track of the pid, and wait for Rails to start.
|
69
|
+
Process.detach(pid)
|
70
|
+
File.open(pid_file, "w"){|f| f.write pid}
|
71
|
+
|
72
|
+
print "Starting spork..."
|
73
|
+
timeout = 20
|
74
|
+
seconds = 0
|
75
|
+
until port_bound?(port)
|
76
|
+
print '.'; $stdout.flush
|
77
|
+
seconds += 1
|
78
|
+
break if seconds > timeout
|
79
|
+
sleep 1
|
80
|
+
end
|
81
|
+
|
82
|
+
# See if the process actually started
|
83
|
+
if process_running?
|
84
|
+
puts "\033[32m[Spork running in background with pid #{pid}]\033[0m\n"
|
85
|
+
else
|
86
|
+
puts "\033[31m[Spork failed to start]\033[0m\n"
|
87
|
+
end
|
88
|
+
rescue StandardError => e
|
89
|
+
puts e.inspect
|
90
|
+
puts "\033[31m[Spork failed to start]\033[0m\n"
|
91
|
+
stop_spork
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def stop_spork
|
96
|
+
print "Stopping spork..."
|
97
|
+
if pid_to_kill = pid
|
98
|
+
begin
|
99
|
+
Process.kill("INT", pid_to_kill)
|
100
|
+
print "\033[32m[OK]\033[0m\n"
|
101
|
+
sleep 1
|
102
|
+
rescue Errno::ESRCH => e
|
103
|
+
print "\033[33m[not running]\033[0m\n"
|
104
|
+
rescue StandardError => e
|
105
|
+
print "\033[31m[FAILED]\033[0m\n"
|
106
|
+
puts e.inspect
|
107
|
+
end
|
108
|
+
else
|
109
|
+
print "\033[33m[not running]\033[0m\n"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def pid_file
|
114
|
+
dir = File.join(Rails.root, 'tmp')
|
115
|
+
File.join(dir, 'spork.pid')
|
116
|
+
end
|
117
|
+
|
118
|
+
def pid
|
119
|
+
return unless File.exist?(pid_file)
|
120
|
+
File.read(pid_file).to_i
|
121
|
+
end
|
122
|
+
|
123
|
+
def process_running?
|
124
|
+
begin
|
125
|
+
Process.kill(0, pid)
|
126
|
+
return true
|
127
|
+
rescue Errno::ESRCH => e
|
128
|
+
return false
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def port_bound?(port)
|
133
|
+
begin
|
134
|
+
Timeout::timeout(1) do
|
135
|
+
begin
|
136
|
+
s = TCPSocket.new('localhost', port)
|
137
|
+
s.close
|
138
|
+
return true
|
139
|
+
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
|
140
|
+
return false
|
141
|
+
end
|
142
|
+
end
|
143
|
+
rescue Timeout::Error
|
144
|
+
return false
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
data/lib/spork/tasks.rb
ADDED
data/spec/spec_helper.rb
ADDED
data/spec/task_spec.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SporkTasks do
|
4
|
+
describe 'install_tasks' do
|
5
|
+
|
6
|
+
it "defines Rake tasks" do
|
7
|
+
names = %w[spork:start spork:stop spork:restart]
|
8
|
+
|
9
|
+
names.each { |name|
|
10
|
+
expect { Rake.application[name] }.to raise_error(/Don't know how to build task/)
|
11
|
+
}
|
12
|
+
|
13
|
+
SporkTasks.new.install
|
14
|
+
|
15
|
+
names.each { |name|
|
16
|
+
expect { Rake.application[name] }.not_to raise_error
|
17
|
+
expect(Rake.application[name]).to be_instance_of Rake::Task
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/spork_tasks.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
Gem::Specification.new do |s|
|
3
3
|
s.name = "spork_tasks"
|
4
|
-
s.version = "1.
|
4
|
+
s.version = "1.1.1"
|
5
5
|
s.authors = ["Tyler Montgomery"]
|
6
6
|
s.email = ["tyler.a.montgomery@gmail.com"]
|
7
7
|
s.homepage = ""
|
@@ -12,4 +12,9 @@ Gem::Specification.new do |s|
|
|
12
12
|
|
13
13
|
s.files = `git ls-files`.split("\n")
|
14
14
|
s.require_paths = ["lib"]
|
15
|
+
|
16
|
+
s.add_dependency 'rake'
|
17
|
+
s.add_dependency 'spork'
|
18
|
+
|
19
|
+
s.add_development_dependency 'rspec'
|
15
20
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spork_tasks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,56 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
dependencies:
|
12
|
+
date: 2014-02-04 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: spork
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
14
62
|
description: start|stop|restart tasks to manage the Spork drb server
|
15
63
|
email:
|
16
64
|
- tyler.a.montgomery@gmail.com
|
@@ -18,10 +66,14 @@ executables: []
|
|
18
66
|
extensions: []
|
19
67
|
extra_rdoc_files: []
|
20
68
|
files:
|
69
|
+
- Gemfile
|
70
|
+
- Gemfile.lock
|
21
71
|
- README.md
|
22
72
|
- Rakefile
|
23
|
-
- lib/
|
24
|
-
- lib/
|
73
|
+
- lib/spork/task_helper.rb
|
74
|
+
- lib/spork/tasks.rb
|
75
|
+
- spec/spec_helper.rb
|
76
|
+
- spec/task_spec.rb
|
25
77
|
- spork_tasks.gemspec
|
26
78
|
homepage: ''
|
27
79
|
licenses: []
|
@@ -35,15 +87,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
35
87
|
- - ! '>='
|
36
88
|
- !ruby/object:Gem::Version
|
37
89
|
version: '0'
|
90
|
+
segments:
|
91
|
+
- 0
|
92
|
+
hash: 3397655467472293831
|
38
93
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
39
94
|
none: false
|
40
95
|
requirements:
|
41
96
|
- - ! '>='
|
42
97
|
- !ruby/object:Gem::Version
|
43
98
|
version: '0'
|
99
|
+
segments:
|
100
|
+
- 0
|
101
|
+
hash: 3397655467472293831
|
44
102
|
requirements: []
|
45
103
|
rubyforge_project: spork_tasks
|
46
|
-
rubygems_version: 1.8.
|
104
|
+
rubygems_version: 1.8.23
|
47
105
|
signing_key:
|
48
106
|
specification_version: 3
|
49
107
|
summary: Rake tasks for managing Spork
|
@@ -1,108 +0,0 @@
|
|
1
|
-
require 'spork'
|
2
|
-
require 'spork/runner'
|
3
|
-
# Let's fork spork and put in the background and forget about it.
|
4
|
-
# You can start|stop|restart spork using this rake task
|
5
|
-
#
|
6
|
-
# Examples
|
7
|
-
#
|
8
|
-
# rake spork:start
|
9
|
-
# # => starts spork and detaches the process
|
10
|
-
#
|
11
|
-
# rake spork:stop
|
12
|
-
# # => kills the spork process based on the pid stored in tmp/spork.pid
|
13
|
-
#
|
14
|
-
# rake spork:restart
|
15
|
-
# # => stops then starts spork
|
16
|
-
#
|
17
|
-
namespace :spork do
|
18
|
-
desc "Starts spork server"
|
19
|
-
task :start do
|
20
|
-
begin
|
21
|
-
print "Starting spork..."
|
22
|
-
|
23
|
-
pid = fork do
|
24
|
-
# Swallows spork's notifications. I don't want it spewing all over my terminal from the background.
|
25
|
-
$stdout = File.new('/dev/null', 'w')
|
26
|
-
# If you want to change the default config you can
|
27
|
-
# specify the command line options here
|
28
|
-
# For example to change the port:
|
29
|
-
# options = ["--port", "7443"]
|
30
|
-
options = []
|
31
|
-
begin
|
32
|
-
Spork::Runner.run(options, $stderr, $stderr)
|
33
|
-
rescue => e
|
34
|
-
$stderr.puts
|
35
|
-
$stderr.puts "#{e.class} => #{e.message}"
|
36
|
-
$stderr.puts e.backtrace.join("\n")
|
37
|
-
end
|
38
|
-
# TODO maybe swallow stderr now... will that work?
|
39
|
-
# It should b/c its in the same process... or does spork hijack it?
|
40
|
-
# $stderr = File.new('/dev/null', 'w')
|
41
|
-
end
|
42
|
-
|
43
|
-
# Detach the pid, keep track of the pid, and wait for Rails to start.
|
44
|
-
|
45
|
-
Process.detach(pid)
|
46
|
-
File.open("#{tmp_dir}/spork.pid", "w"){|f| f.write pid}
|
47
|
-
|
48
|
-
seconds = 15
|
49
|
-
|
50
|
-
puts "\033[35m[Giving Rails #{seconds} seconds to start]\033[0m\n"
|
51
|
-
puts "\033[36mYou can change the wait time in lib/tasks/spork.rake \nif Rails is taking longer than #{seconds} seconds to load\033[0m\n"
|
52
|
-
|
53
|
-
sleep seconds
|
54
|
-
|
55
|
-
# See if the process actually started
|
56
|
-
if process_running?(pid)
|
57
|
-
puts "\033[32m[Sporkified!]\033[0m\n"
|
58
|
-
else
|
59
|
-
puts "\033[31m[Spork failed to start]\033[0m\n"
|
60
|
-
end
|
61
|
-
rescue StandardError => e
|
62
|
-
puts e.inspect
|
63
|
-
puts "\033[31m[Spork failed to start]\033[0m\n"
|
64
|
-
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
desc "Stops the spork server"
|
69
|
-
task :stop do
|
70
|
-
print "Stopping spork..."
|
71
|
-
if File.exist?("#{tmp_dir}/spork.pid")
|
72
|
-
pid = File.read("#{tmp_dir}/spork.pid").to_i
|
73
|
-
begin
|
74
|
-
Process.kill("INT", pid)
|
75
|
-
print "\033[32m[OK]\033[0m\n"
|
76
|
-
sleep 1
|
77
|
-
rescue Errno::ESRCH => e
|
78
|
-
print "\033[33m[not running]\033[0m\n"
|
79
|
-
rescue StandardError => e
|
80
|
-
print "\033[31m[FAILED]\033[0m\n"
|
81
|
-
puts e.inspect
|
82
|
-
end
|
83
|
-
else
|
84
|
-
print "\033[33m[not running]\033[0m\n"
|
85
|
-
end
|
86
|
-
print "\033[30mis it a spoon? is it a fork?\033[0m\n"
|
87
|
-
end
|
88
|
-
|
89
|
-
desc "Restart the spork server"
|
90
|
-
task :restart => [:stop, :start]
|
91
|
-
|
92
|
-
def tmp_dir
|
93
|
-
File.expand_path('../../../tmp', __FILE__)
|
94
|
-
end
|
95
|
-
|
96
|
-
def process_running?(pid=nil)
|
97
|
-
unless pid
|
98
|
-
return unless File.exist?("#{tmp_dir}/spork.pid")
|
99
|
-
pid = File.read("#{tmp_dir}/spork.pid").to_i
|
100
|
-
end
|
101
|
-
begin
|
102
|
-
Process.kill(0, pid)
|
103
|
-
rescue Errno::ESRCH => e
|
104
|
-
return false
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
end
|