resque-fallback-inline 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,18 @@
1
+ .rvmrc
2
+ *.gem
3
+ *.rbc
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in resque-fallback-inline.gemspec
4
+ gemspec
5
+
6
+ group :test do
7
+ gem 'ruby-debug19'
8
+ gem 'rake'
9
+ end
@@ -0,0 +1,5 @@
1
+ Resque-fallback-inline
2
+ ======================
3
+
4
+ Resque will fail to enqueue your job if redis is unavailable.
5
+ Resque-fallback-inline ensures that the job will be run inline if that happens.
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+
4
+ require 'rake/testtask'
5
+
6
+ task :default => :test
7
+
8
+ Rake::TestTask.new do |test|
9
+ test.libs << "test"
10
+ test.test_files = FileList['test/**/*_test.rb']
11
+ end
@@ -0,0 +1,22 @@
1
+ require "resque-fallback-inline/version"
2
+
3
+ module ResqueFallbackInline
4
+
5
+ def enqueue(*args)
6
+ super
7
+ rescue Errno::ECONNREFUSED => e
8
+ unless Resque.inline?
9
+ begin
10
+ Resque.inline = true
11
+ super
12
+ ensure
13
+ Resque.inline = false
14
+ end
15
+ else
16
+ raise e
17
+ end
18
+ end
19
+
20
+ end
21
+
22
+ Resque.extend(ResqueFallbackInline)
@@ -0,0 +1,7 @@
1
+ module Resque
2
+ module Fallback
3
+ module Inline
4
+ VERSION = "0.1.0"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/resque-fallback-inline/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Donald Ball"]
6
+ gem.email = ["donald.ball@gmail.com"]
7
+ gem.description = %q{Resque will fail to enqueue your job if redis is unavailable. Resque-fallback-inline ensures that the job will be run inline if that happens.}
8
+ gem.summary = %q{Runs your jobs inline if redis is unavailable.}
9
+ gem.homepage = ""
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "resque-fallback-inline"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Resque::Fallback::Inline::VERSION
17
+
18
+ gem.add_dependency('resque', '~> 1.19')
19
+ end
@@ -0,0 +1,115 @@
1
+ # Redis configuration file example
2
+
3
+ # By default Redis does not run as a daemon. Use 'yes' if you need it.
4
+ # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
5
+ daemonize yes
6
+
7
+ # When run as a daemon, Redis write a pid file in /var/run/redis.pid by default.
8
+ # You can specify a custom pid file location here.
9
+ pidfile ./test/redis-test.pid
10
+
11
+ # Accept connections on the specified port, default is 6379
12
+ port 9736
13
+
14
+ # If you want you can bind a single interface, if the bind option is not
15
+ # specified all the interfaces will listen for connections.
16
+ #
17
+ # bind 127.0.0.1
18
+
19
+ # Close the connection after a client is idle for N seconds (0 to disable)
20
+ timeout 300
21
+
22
+ # Save the DB on disk:
23
+ #
24
+ # save <seconds> <changes>
25
+ #
26
+ # Will save the DB if both the given number of seconds and the given
27
+ # number of write operations against the DB occurred.
28
+ #
29
+ # In the example below the behaviour will be to save:
30
+ # after 900 sec (15 min) if at least 1 key changed
31
+ # after 300 sec (5 min) if at least 10 keys changed
32
+ # after 60 sec if at least 10000 keys changed
33
+ save 900 1
34
+ save 300 10
35
+ save 60 10000
36
+
37
+ # The filename where to dump the DB
38
+ dbfilename dump.rdb
39
+
40
+ # For default save/load DB in/from the working directory
41
+ # Note that you must specify a directory not a file name.
42
+ dir ./test/
43
+
44
+ # Set server verbosity to 'debug'
45
+ # it can be one of:
46
+ # debug (a lot of information, useful for development/testing)
47
+ # notice (moderately verbose, what you want in production probably)
48
+ # warning (only very important / critical messages are logged)
49
+ loglevel debug
50
+
51
+ # Specify the log file name. Also 'stdout' can be used to force
52
+ # the demon to log on the standard output. Note that if you use standard
53
+ # output for logging but daemonize, logs will be sent to /dev/null
54
+ logfile stdout
55
+
56
+ # Set the number of databases. The default database is DB 0, you can select
57
+ # a different one on a per-connection basis using SELECT <dbid> where
58
+ # dbid is a number between 0 and 'databases'-1
59
+ databases 16
60
+
61
+ ################################# REPLICATION #################################
62
+
63
+ # Master-Slave replication. Use slaveof to make a Redis instance a copy of
64
+ # another Redis server. Note that the configuration is local to the slave
65
+ # so for example it is possible to configure the slave to save the DB with a
66
+ # different interval, or to listen to another port, and so on.
67
+
68
+ # slaveof <masterip> <masterport>
69
+
70
+ ################################## SECURITY ###################################
71
+
72
+ # Require clients to issue AUTH <PASSWORD> before processing any other
73
+ # commands. This might be useful in environments in which you do not trust
74
+ # others with access to the host running redis-server.
75
+ #
76
+ # This should stay commented out for backward compatibility and because most
77
+ # people do not need auth (e.g. they run their own servers).
78
+
79
+ # requirepass foobared
80
+
81
+ ################################### LIMITS ####################################
82
+
83
+ # Set the max number of connected clients at the same time. By default there
84
+ # is no limit, and it's up to the number of file descriptors the Redis process
85
+ # is able to open. The special value '0' means no limts.
86
+ # Once the limit is reached Redis will close all the new connections sending
87
+ # an error 'max number of clients reached'.
88
+
89
+ # maxclients 128
90
+
91
+ # Don't use more memory than the specified amount of bytes.
92
+ # When the memory limit is reached Redis will try to remove keys with an
93
+ # EXPIRE set. It will try to start freeing keys that are going to expire
94
+ # in little time and preserve keys with a longer time to live.
95
+ # Redis will also try to remove objects from free lists if possible.
96
+ #
97
+ # If all this fails, Redis will start to reply with errors to commands
98
+ # that will use more memory, like SET, LPUSH, and so on, and will continue
99
+ # to reply to most read-only commands like GET.
100
+ #
101
+ # WARNING: maxmemory can be a good idea mainly if you want to use Redis as a
102
+ # 'state' server or cache, not as a real DB. When Redis is used as a real
103
+ # database the memory usage will grow over the weeks, it will be obvious if
104
+ # it is going to use too much memory in the long run, and you'll have the time
105
+ # to upgrade. With maxmemory after the limit is reached you'll start to get
106
+ # errors for write operations, and this may even lead to DB inconsistency.
107
+
108
+ # maxmemory <bytes>
109
+
110
+ ############################### ADVANCED CONFIG ###############################
111
+
112
+ # Glue small output buffers together in order to send small replies in a
113
+ # single TCP packet. Uses a bit more CPU but most of the times it is a win
114
+ # in terms of number of queries per second. Use 'yes' if unsure.
115
+ glueoutputbuf yes
@@ -0,0 +1,14 @@
1
+ require 'test_helper'
2
+
3
+ class ResqueFallbackInlineTest < Test::Unit::TestCase
4
+
5
+ def test_resque_falls_back_inline_when_redis_is_dead
6
+ start_redis_test_processes
7
+ kill_redis_test_processes
8
+ SomeJob.reset
9
+ assert_equal 0, SomeJob.performed
10
+ assert Resque.enqueue(SomeJob)
11
+ assert_equal 1, SomeJob.performed
12
+ end
13
+
14
+ end
@@ -0,0 +1,58 @@
1
+ dir = File.dirname(File.expand_path(__FILE__))
2
+
3
+ require 'rubygems'
4
+ require 'test/unit'
5
+ require 'resque'
6
+ require File.join(dir, '../lib/resque-fallback-inline')
7
+ $LOAD_PATH.unshift dir + '/../lib'
8
+ require 'ruby-debug'
9
+
10
+ #
11
+ # make sure we can run redis
12
+ #
13
+
14
+ if !system("which redis-server")
15
+ puts '', "** can't find `redis-server` in your path"
16
+ puts "** try running `sudo rake install`"
17
+ abort ''
18
+ end
19
+
20
+ def kill_redis_test_processes
21
+ dir = File.dirname(File.expand_path(__FILE__))
22
+ processes = `ps -A -o pid,command | grep [r]edis-test`.split("\n")
23
+ pids = processes.map { |process| process.split(" ")[0] }
24
+ puts "Killing test redis server..."
25
+ `rm -f #{dir}/dump.rdb #{dir}/dump-cluster.rdb`
26
+ pids.each { |pid| Process.kill("KILL", pid.to_i) }
27
+ end
28
+
29
+ def start_redis_test_processes
30
+ dir = File.dirname(File.expand_path(__FILE__))
31
+ puts "Starting redis for testing at localhost:9736..."
32
+ `redis-server #{dir}/redis-test.conf`
33
+ Resque.redis = 'localhost:9736'
34
+ end
35
+
36
+ #
37
+ # fixture classes
38
+ #
39
+
40
+ class SomeJob
41
+
42
+ def self.queue
43
+ :queue
44
+ end
45
+
46
+ def self.perform
47
+ @performed ||= 0
48
+ @performed += 1
49
+ end
50
+
51
+ def self.performed
52
+ @performed
53
+ end
54
+
55
+ def self.reset
56
+ @performed = 0
57
+ end
58
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: resque-fallback-inline
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Donald Ball
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-03 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: resque
16
+ requirement: &70099566865280 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.19'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70099566865280
25
+ description: Resque will fail to enqueue your job if redis is unavailable. Resque-fallback-inline
26
+ ensures that the job will be run inline if that happens.
27
+ email:
28
+ - donald.ball@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - .gitignore
34
+ - Gemfile
35
+ - README.markdown
36
+ - Rakefile
37
+ - lib/resque-fallback-inline.rb
38
+ - lib/resque-fallback-inline/version.rb
39
+ - resque-fallback-inline.gemspec
40
+ - test/redis-test.conf
41
+ - test/resque_fallback_inline_test.rb
42
+ - test/test_helper.rb
43
+ homepage: ''
44
+ licenses: []
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ requirements: []
62
+ rubyforge_project:
63
+ rubygems_version: 1.8.6
64
+ signing_key:
65
+ specification_version: 3
66
+ summary: Runs your jobs inline if redis is unavailable.
67
+ test_files:
68
+ - test/redis-test.conf
69
+ - test/resque_fallback_inline_test.rb
70
+ - test/test_helper.rb