خطأ وقت تشغيل RESQUE في /العمال: عدد خاطئ من الحجج الخاصة بـ "موجود" أمر
سؤال
أواجه وقت تشغيل في وقت التشغيل عندما أنظر إلى علامة التبويب "العمال" على Resque-Web (LocalHost). كل شيء آخر يعمل.
تحرير: عندما يحدث هذا الخطأ ، لدي أيضًا (3 أو 4) عمال غير معروفين لا يعملون. أعتقد أنهم مسؤولون عن الخطأ ولكني لا أفهم كيف وصلوا إلى هنا. يحدث ذلك فقط عندما أبدأ العمال من الله
هل يمكنك مساعدتي على ذلك ؟ هل فعلت شيئا خطأ ؟
التكوين: Resque 1.8.5 كجوهرة في قضبان 2.3.8 على تطبيق Snow Leopard Redis 1.0.7 / Rack 1.1 / Sinatra 1.0 / Vegas 0.1.7
- ملف: client.rb
- الموقع: format_error_reply
- الخط: 558
Backtrace:
* /Library/Ruby/Gems/1.8/gems/redis-1.0.7/lib/redis/client.rb in format_error_reply
*
551. when DOLLAR then format_bulk_reply(line)
552. when ASTERISK then format_multi_bulk_reply(line)
553. else raise ProtocolError.new(reply_type)
554. end
555. end
556.
557. def format_error_reply(line)
558. raise "-" + line.strip
559. end
560.
561. def format_status_reply(line)
562. line.strip
563. end
564.
565. def format_integer_reply(line)
* /Library/Ruby/Gems/1.8/gems/redis-1.0.7/lib/redis/client.rb in format_reply
*
541.
542. def reconnect
543. disconnect && connect_to_server
544. end
545.
546. def format_reply(reply_type, line)
547. case reply_type
548. when MINUS then format_error_reply(line)
549. when PLUS then format_status_reply(line)
550. when COLON then format_integer_reply(line)
551. when DOLLAR then format_bulk_reply(line)
552. when ASTERISK then format_multi_bulk_reply(line)
553. else raise ProtocolError.new(reply_type)
554. end
555. end
* /Library/Ruby/Gems/1.8/gems/redis-1.0.7/lib/redis/client.rb in read_reply
*
478. disconnect
479.
480. raise Errno::EAGAIN, "Timeout reading from the socket"
481. end
482.
483. raise Errno::ECONNRESET, "Connection lost" unless reply_type
484.
485. format_reply(reply_type, @sock.gets)
486. end
487.
488.
489. if "".respond_to?(:bytesize)
490. def get_size(string)
491. string.bytesize
492. end
* /Library/Ruby/Gems/1.8/gems/redis-1.0.7/lib/redis/client.rb in process_command
*
448. return pipeline ? results : results[0]
449. end
450.
451. def process_command(command, argvv)
452. @sock.write(command)
453. argvv.map do |argv|
454. processor = REPLY_PROCESSOR[argv[0].to_s]
455. processor ? processor.call(read_reply) : read_reply
456. end
457. end
458.
459. def maybe_lock(&block)
460. if @thread_safe
461. @mutex.synchronize(&block)
462. else
* /Library/Ruby/Gems/1.8/gems/redis-1.0.7/lib/redis/client.rb in map
*
446. end
447.
448. return pipeline ? results : results[0]
449. end
450.
451. def process_command(command, argvv)
452. @sock.write(command)
453. argvv.map do |argv|
454. processor = REPLY_PROCESSOR[argv[0].to_s]
455. processor ? processor.call(read_reply) : read_reply
456. end
457. end
458.
459. def maybe_lock(&block)
460. if @thread_safe
* /Library/Ruby/Gems/1.8/gems/redis-1.0.7/lib/redis/client.rb in process_command
*
446. end
447.
448. return pipeline ? results : results[0]
449. end
450.
451. def process_command(command, argvv)
452. @sock.write(command)
453. argvv.map do |argv|
454. processor = REPLY_PROCESSOR[argv[0].to_s]
455. processor ? processor.call(read_reply) : read_reply
456. end
457. end
458.
459. def maybe_lock(&block)
460. if @thread_safe
* /Library/Ruby/Gems/1.8/gems/redis-1.0.7/lib/redis/client.rb in raw_call_command
*
435. @sock.write(command)
436. return true
437. end
438. # The normal command execution is reading and processing the reply.
439. results = maybe_lock do
440. begin
441. set_socket_timeout!(0) if requires_timeout_reset?(argvv[0][0].to_s)
442. process_command(command, argvv)
443. ensure
444. set_socket_timeout!(@timeout) if requires_timeout_reset?(argvv[0][0].to_s)
445. end
446. end
447.
448. return pipeline ? results : results[0]
449. end
* /Library/Ruby/Gems/1.8/gems/redis-1.0.7/lib/redis/client.rb in synchronize
*
454. processor = REPLY_PROCESSOR[argv[0].to_s]
455. processor ? processor.call(read_reply) : read_reply
456. end
457. end
458.
459. def maybe_lock(&block)
460. if @thread_safe
461. @mutex.synchronize(&block)
462. else
463. block.call
464. end
465. end
466.
467. def read_reply
468.
* /Library/Ruby/Gems/1.8/gems/redis-1.0.7/lib/redis/client.rb in maybe_lock
*
454. processor = REPLY_PROCESSOR[argv[0].to_s]
455. processor ? processor.call(read_reply) : read_reply
456. end
457. end
458.
459. def maybe_lock(&block)
460. if @thread_safe
461. @mutex.synchronize(&block)
462. else
463. block.call
464. end
465. end
466.
467. def read_reply
468.
* /Library/Ruby/Gems/1.8/gems/redis-1.0.7/lib/redis/client.rb in raw_call_command
*
432. end
433. # When in Pub/Sub mode we don't read replies synchronously.
434. if @pubsub
435. @sock.write(command)
436. return true
437. end
438. # The normal command execution is reading and processing the reply.
439. results = maybe_lock do
440. begin
441. set_socket_timeout!(0) if requires_timeout_reset?(argvv[0][0].to_s)
442. process_command(command, argvv)
443. ensure
444. set_socket_timeout!(@timeout) if requires_timeout_reset?(argvv[0][0].to_s)
445. end
446. end
* /Library/Ruby/Gems/1.8/gems/redis-1.0.7/lib/redis/client.rb in call_command
*
336. # try to reconnect just one time, otherwise let the error araise.
337. def call_command(argv)
338. log(argv.inspect, :debug)
339.
340. connect_to_server unless connected?
341.
342. begin
343. raw_call_command(argv.dup)
344. rescue Errno::ECONNRESET, Errno::EPIPE, Errno::ECONNABORTED
345. if reconnect
346. raw_call_command(argv.dup)
347. else
348. raise Errno::ECONNRESET
349. end
350. end
* /Library/Ruby/Gems/1.8/gems/redis-1.0.7/lib/redis/client.rb in method_missing
*
385. connect_to(@host, @port)
386. call_command([:auth, @password]) if @password
387. call_command([:select, @db]) if @db != 0
388. @sock
389. end
390.
391. def method_missing(*argv)
392. call_command(argv)
393. end
394.
395. def raw_call_command(argvp)
396. if argvp[0].is_a?(Array)
397. argvv = argvp
398. pipeline = true
399. else
* /Library/Ruby/Gems/1.8/gems/redis-namespace-0.4.4/lib/redis/namespace.rb in send
*
159. args = add_namespace(args)
160. args.push(last) if last
161. when :alternate
162. args = [ add_namespace(Hash[*args]) ]
163. end
164.
165. # Dispatch the command to Redis and store the result.
166. result = @redis.send(command, *args, &block)
167.
168. # Remove the namespace from results that are keys.
169. result = rem_namespace(result) if after == :all
170.
171. result
172. end
173.
* /Library/Ruby/Gems/1.8/gems/redis-namespace-0.4.4/lib/redis/namespace.rb in method_missing
*
159. args = add_namespace(args)
160. args.push(last) if last
161. when :alternate
162. args = [ add_namespace(Hash[*args]) ]
163. end
164.
165. # Dispatch the command to Redis and store the result.
166. result = @redis.send(command, *args, &block)
167.
168. # Remove the namespace from results that are keys.
169. result = rem_namespace(result) if after == :all
170.
171. result
172. end
173.
* /Library/Ruby/Gems/1.8/gems/resque-1.8.5/lib/resque/worker.rb in state
*
416. def idle?
417. state == :idle
418. end
419.
420. # Returns a symbol representing the current worker state,
421. # which can be either :working or :idle
422. def state
423. redis.exists("worker:#{self}") ? :working : :idle
424. end
425.
426. # Is this worker the same as another worker?
427. def ==(other)
428. to_s == other.to_s
429. end
430.
* /Library/Ruby/Gems/1.8/gems/resque-1.8.5/lib/resque/server/views/workers.erb in __tilt_a2112543c5200dbe0635da5124b47311
*
46. <tr>
47. <th> </th>
48. <th>Where</th>
49. <th>Queues</th>
50. <th>Processing</th>
51. </tr>
52. <% for worker in (workers = resque.workers.sort_by { |w| w.to_s }) %>
53. <tr class="<%=state = worker.state%>">
54. <td class='icon'><img src="<%=u state %>.png" alt="<%= state %>" title="<%= state %>"></td>
55.
56. <% host, pid, queues = worker.to_s.split(':') %>
57. <td class='where'><a href="<%=u "workers/#{worker}"%>"><%= host %>:<%= pid %></a></td>
58. <td class='queues'><%= queues.split(',').map { |q| '<a class="queue-tag" href="' + u("/queues/#{q}") + '">' + q + '</a>'}.join('') %></td>
59.
60. <td class='process'>
* /Library/Ruby/Gems/1.8/gems/resque-1.8.5/lib/resque/server/views/workers.erb in each
* /Library/Ruby/Gems/1.8/gems/resque-1.8.5/lib/resque/server/views/workers.erb in __tilt_a2112543c5200dbe0635da5124b47311
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/tilt.rb in send
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/tilt.rb in evaluate
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/tilt.rb in render
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in render
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in erb
* /Library/Ruby/Gems/1.8/gems/resque-1.8.5/lib/resque/server.rb in show
* /Library/Ruby/Gems/1.8/gems/resque-1.8.5/lib/resque/server.rb in GET /workers
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in call
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in route
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in instance_eval
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in route_eval
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in route!
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in catch
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in route!
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in each
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in route!
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in dispatch!
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in call!
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in instance_eval
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in invoke
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in catch
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in invoke
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in call!
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in call
* /Volumes/Donnees/Users/**/.gem/ruby/1.8/gems/rack-1.1.0/lib/rack/showexceptions.rb in call
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in call
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in synchronize
* /Library/Ruby/Gems/1.8/gems/sinatra-1.0/lib/sinatra/base.rb in call
* /Volumes/Donnees/Users/**/.gem/ruby/1.8/gems/rack-1.1.0/lib/rack/content_length.rb in call
* /Volumes/Donnees/Users/**/.gem/ruby/1.8/gems/rack-1.1.0/lib/rack/chunked.rb in call
* /Volumes/Donnees/Users/**/.gem/ruby/1.8/gems/rack-1.1.0/lib/rack/handler/mongrel.rb in process
* /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb in process_client
* /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb in each
* /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb in process_client
* /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb in run
* /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb in initialize
* /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb in new
* /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb in run
* /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb in initialize
* /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb in new
* /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb in run
* /Volumes/Donnees/Users/**/.gem/ruby/1.8/gems/rack-1.1.0/lib/rack/handler/mongrel.rb in run
* /Library/Ruby/Gems/1.8/gems/vegas-0.1.7/lib/vegas/runner.rb in run!
* /Library/Ruby/Gems/1.8/gems/vegas-0.1.7/lib/vegas/runner.rb in start
* /Library/Ruby/Gems/1.8/gems/resque-1.8.5/bin/resque-web in new
* /Library/Ruby/Gems/1.8/gems/resque-1.8.5/bin/resque-web in nil
* /usr/bin/resque-web in load
المحلول
لقد وجدت المشكلة:
في ملف تكوين الله ، كان لدي (مع مسافات بعد الفاصلة في قائمة الانتظار):
num_workers.times do |num|
God.watch do |w|
w.name = "resque-#{num}"
w.group = 'resque'
w.interval = 30.seconds
w.env = {"QUEUE"=>"critical, high, low", "RAILS_ENV"=>rails_env}
بدلاً من (بدون مسافات بعد الفاصلة):
num_workers.times do |num|
God.watch do |w|
w.name = "resque-#{num}"
w.group = 'resque'
w.interval = 30.seconds
w.env = {"QUEUE"=>"critical,high,low", "RAILS_ENV"=>rails_env}
الآن يعمل !!
لا تنتمي إلى StackOverflow