Skip to content

Commit

Permalink
Holy crap, it boots Rails3 and actually sends messages to the workers!
Browse files Browse the repository at this point in the history
  • Loading branch information
mperham committed Jan 23, 2012
1 parent e7ae72d commit 8914413
Show file tree
Hide file tree
Showing 38 changed files with 618 additions and 12 deletions.
7 changes: 7 additions & 0 deletions bin/client
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/usr/bin/env ruby

require 'sidekiq'

10.times do
Sidekiq::Client.push('foo', 'class' => 'HardWorker', 'args' => ['bob', 1])
end
1 change: 0 additions & 1 deletion lib/sidekiq.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
require 'sidekiq/version'
require 'sidekiq/util'
require 'sidekiq/client'
22 changes: 18 additions & 4 deletions lib/sidekiq/cli.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class CLI
def initialize
parse_options
validate!
enable_rails3 if File.exist?("config/application.rb")
boot_rails
end

def run
Expand All @@ -19,18 +19,21 @@ def run
begin
log 'Starting processing, hit Ctrl-C to stop'
server.start!
sleep 1_000_000_000
sleep 1000
rescue Interrupt
log 'Shutting down...'
server.stop!
server.wait(:shutdown)
end
end

private

def enable_rails3
def boot_rails
#APP_PATH = File.expand_path('config/application.rb')
require File.expand_path('config/boot.rb')
ENV['RAILS_ENV'] = 'production'
require File.expand_path("#{@options[:rails]}/config/environment.rb")
Rails.application.config.threadsafe!
end

def validate!
Expand All @@ -40,6 +43,12 @@ def validate!
log @parser
exit(1)
end

if !File.exist?("#{@options[:rails]}/config/boot.rb")
log "========== Please point sidekiq to a Rails 3 application =========="
log @parser
exit(1)
end
end

def parse_options(argv=ARGV)
Expand All @@ -50,6 +59,7 @@ def parse_options(argv=ARGV)
:worker_count => 25,
:server => 'redis://localhost:6379/0',
:pidfile => nil,
:rails => '.',
}

@parser = OptionParser.new do |o|
Expand All @@ -76,6 +86,10 @@ def parse_options(argv=ARGV)
@options[:server] = arg
end

o.on '-r', '--rails PATH', "Rails application with workers" do |arg|
@options[:rails] = arg
end

o.on '-c', '--concurrency INT', "Worker threads to use" do |arg|
@options[:worker_count] = arg.to_i
end
Expand Down
17 changes: 10 additions & 7 deletions lib/sidekiq/server.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
require 'redis'
require 'multi_json'

require 'sidekiq/util'
require 'sidekiq/worker'

module Sidekiq
Expand All @@ -24,7 +25,7 @@ def initialize(location, options={})
@queues = options[:queues]
@queue_idx = 0
@queues_size = @queues.size
@redis = Redis.new(:host => options[:redis_host], :port => options[:redis_port])
@redis = Redis.connect(:url => location)

@done = false
@busy = []
Expand All @@ -39,9 +40,8 @@ def stop
@ready.each(&:terminate)
@ready.clear

after(30) do
@busy.each(&:terminate)
terminate
after(5) do
signal(:shutdown)
end
end

Expand All @@ -61,11 +61,14 @@ def worker_done(worker)

def worker_died(worker, reason)
@busy.delete(worker)
log "Worker death: #{reason}"
log reason.backtrace.join("\n") if reason

if reason
log "Worker death: #{reason}"
log reason.backtrace.join("\n")
end

unless stopped?
@ready << Worker.new_link
@ready << Worker.new_link
dispatch
end
end
Expand Down
2 changes: 2 additions & 0 deletions lib/sidekiq/worker.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require 'active_support/inflector'

module Sidekiq
class Worker
include Celluloid
Expand Down
15 changes: 15 additions & 0 deletions myapp/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# See http://help.github.com/ignore-files/ for more about ignoring files.
#
# If you find yourself ignoring temporary files generated by your text editor
# or operating system, you probably want to add a global ignore instead:
# git config --global core.excludesfile ~/.gitignore_global

# Ignore bundler config
/.bundle

# Ignore the default SQLite database.
/db/*.sqlite3

# Ignore all logfiles and tempfiles.
/log/*.log
/tmp
38 changes: 38 additions & 0 deletions myapp/Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
source 'https://rubygems.org'

gem 'rails', '3.2.0'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'


# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'

# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer'

gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the web server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'ruby-debug19', :require => 'ruby-debug'
111 changes: 111 additions & 0 deletions myapp/Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
GEM
remote: https://rubygems.org/
specs:
actionmailer (3.2.0)
actionpack (= 3.2.0)
mail (~> 2.4.0)
actionpack (3.2.0)
activemodel (= 3.2.0)
activesupport (= 3.2.0)
builder (~> 3.0.0)
erubis (~> 2.7.0)
journey (~> 1.0.0)
rack (~> 1.4.0)
rack-cache (~> 1.1)
rack-test (~> 0.6.1)
sprockets (~> 2.1.2)
activemodel (3.2.0)
activesupport (= 3.2.0)
builder (~> 3.0.0)
activerecord (3.2.0)
activemodel (= 3.2.0)
activesupport (= 3.2.0)
arel (~> 3.0.0)
tzinfo (~> 0.3.29)
activeresource (3.2.0)
activemodel (= 3.2.0)
activesupport (= 3.2.0)
activesupport (3.2.0)
i18n (~> 0.6)
multi_json (~> 1.0)
arel (3.0.0)
builder (3.0.0)
coffee-rails (3.2.1)
coffee-script (>= 2.2.0)
railties (~> 3.2.0.beta)
coffee-script (2.2.0)
coffee-script-source
execjs
coffee-script-source (1.2.0)
erubis (2.7.0)
execjs (1.3.0)
multi_json (~> 1.0)
hike (1.2.1)
i18n (0.6.0)
journey (1.0.0)
jquery-rails (2.0.0)
railties (>= 3.2.0.beta, < 5.0)
thor (~> 0.14)
json (1.6.5)
mail (2.4.1)
i18n (>= 0.4.0)
mime-types (~> 1.16)
treetop (~> 1.4.8)
mime-types (1.17.2)
multi_json (1.0.4)
polyglot (0.3.3)
rack (1.4.1)
rack-cache (1.1)
rack (>= 0.4)
rack-ssl (1.3.2)
rack
rack-test (0.6.1)
rack (>= 1.0)
rails (3.2.0)
actionmailer (= 3.2.0)
actionpack (= 3.2.0)
activerecord (= 3.2.0)
activeresource (= 3.2.0)
activesupport (= 3.2.0)
bundler (~> 1.0)
railties (= 3.2.0)
railties (3.2.0)
actionpack (= 3.2.0)
activesupport (= 3.2.0)
rack-ssl (~> 1.3.2)
rake (>= 0.8.7)
rdoc (~> 3.4)
thor (~> 0.14.6)
rake (0.9.2.2)
rdoc (3.12)
json (~> 1.4)
sass (3.1.12)
sass-rails (3.2.3)
railties (~> 3.2.0.beta)
sass (>= 3.1.10)
tilt (~> 1.3)
sprockets (2.1.2)
hike (~> 1.2)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
sqlite3 (1.3.5)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
polyglot
polyglot (>= 0.3.1)
tzinfo (0.3.31)
uglifier (1.2.2)
execjs (>= 0.3.0)
multi_json (>= 1.0.2)

PLATFORMS
ruby

DEPENDENCIES
coffee-rails (~> 3.2.1)
jquery-rails
rails (= 3.2.0)
sass-rails (~> 3.2.3)
sqlite3
uglifier (>= 1.0.3)
7 changes: 7 additions & 0 deletions myapp/Rakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/usr/bin/env rake
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.

require File.expand_path('../config/application', __FILE__)

Myapp::Application.load_tasks
3 changes: 3 additions & 0 deletions myapp/app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
class ApplicationController < ActionController::Base
protect_from_forgery
end
2 changes: 2 additions & 0 deletions myapp/app/helpers/application_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
module ApplicationHelper
end
Empty file added myapp/app/mailers/.gitkeep
Empty file.
Empty file added myapp/app/models/.gitkeep
Empty file.
2 changes: 2 additions & 0 deletions myapp/app/models/post.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class Post < ActiveRecord::Base
end
14 changes: 14 additions & 0 deletions myapp/app/views/layouts/application.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html>
<head>
<title>Myapp</title>
<%= stylesheet_link_tag "application", :media => "all" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>

<%= yield %>

</body>
</html>
6 changes: 6 additions & 0 deletions myapp/app/workers/hard_worker.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class HardWorker
def perform(name, count)
print "#{Thread.current} Working hard\n"
sleep 3
end
end
4 changes: 4 additions & 0 deletions myapp/config.ru
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# This file is used by Rack-based servers to start the application.

require ::File.expand_path('../config/environment', __FILE__)
run Myapp::Application
Loading

0 comments on commit 8914413

Please sign in to comment.