Skip to content

Commit

Permalink
More robust EM loop and restarting
Browse files Browse the repository at this point in the history
  • Loading branch information
nesquena committed Dec 30, 2011
1 parent 9ce5cac commit 1b237c1
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 30 deletions.
10 changes: 5 additions & 5 deletions gitdocs.gemspec
Expand Up @@ -19,15 +19,15 @@ Gem::Specification.new do |s|
s.require_paths = ["lib"]

s.add_dependency 'joshbuddy-guard', '~> 0.10.0'
s.add_dependency 'thin'
s.add_dependency 'thin', '~> 1.3.1'
s.add_dependency 'renee', '~> 0.3.7'
s.add_dependency 'redcarpet', '~> 2.0.0'
s.add_dependency 'thor'
s.add_dependency 'coderay'
s.add_dependency 'thor', '~> 0.14.6'
s.add_dependency 'coderay', '~> 1.0.4'
s.add_dependency 'dante', '~> 0.1.2'
s.add_dependency 'growl', '~> 1.0.3'
s.add_dependency 'yajl-ruby'
s.add_dependency 'haml'
s.add_dependency 'yajl-ruby', '~> 1.1.0'
s.add_dependency 'haml', '~> 3.1.4'
s.add_dependency 'sqlite3', "~> 1.3.4"
s.add_dependency 'activerecord', "~> 3.1.0"
s.add_dependency 'grit', "~> 2.4.1"
Expand Down
63 changes: 38 additions & 25 deletions lib/gitdocs/manager.rb
Expand Up @@ -29,30 +29,40 @@ def start
self.log "Shares: #{config.shares.map(&:inspect).join(", ")}"
# Start the repo watchers
runners = nil
EM.run do
self.log "Starting EM loop..."
@runners = config.shares.map { |share| Runner.new(share) }
@runners.each(&:run)
# Start the web front-end
if self.config.global.start_web_frontend
Server.new(self, *@runners).start
EM.defer( proc {
i = 0
web_started = false
begin
TCPSocket.open('127.0.0.1', 8888).close
web_started = true
rescue Errno::ECONNREFUSED
self.log "Retrying server loop..."
sleep 0.2
i += 1
retry if i <= 20
end
system("open http://localhost:8888/") if self.config.global.load_browser_on_startup && web_started
}, proc {
self.log "Web server running!"
})
retrying = false
begin
EM.run do
self.log "Starting EM loop..."
@runners = config.shares.map { |share|
self.log "Starting #{share}"
Runner.new(share)
}
self.log "Running runners... #{@runners.size}"
@runners.each(&:run)
# Start the web front-end
if self.config.global.start_web_frontend
Server.new(self, *@runners).start
EM.defer( proc {
i = 0
web_started = false
begin
TCPSocket.open('127.0.0.1', 8888).close
web_started = true
rescue Errno::ECONNREFUSED
self.log "Retrying server loop..."
sleep 0.2
i += 1
retry if i <= 20
end
system("open http://localhost:8888/") if !retrying && self.config.global.load_browser_on_startup && web_started
}, proc {
self.log "Web server running!"
})
end
end
rescue Restart
retrying = true
retry
end
rescue Exception => e # Report all errors in log
self.log(e.class.inspect + " - " + e.inspect + " - " + e.message.inspect, :error)
Expand All @@ -63,8 +73,11 @@ def start
end

def restart
stop
start
Thread.new do
Thread.main.raise Restart, "restarting ... "
sleep 0.1 while EM.reactor_running?
start
end
end

def stop
Expand Down

0 comments on commit 1b237c1

Please sign in to comment.