2014-10-08 24 views
6

Tôi có nhân viên Sidekiq hoạt động tốt tại địa phương, nhưng khi triển khai cho Heroku, công việc bị kẹt trong hàng đợi. Tôi đang sử dụng Redis-to-go nano và có nó lên và chạy, và tôi đã thu nhỏ nhân viên thành 1 trên Heroku và có thể thấy rằng nó đang hoạt động. Tôi chỉ sử dụng hàng đợi mặc định - không có gì tùy chỉnh hoặc ưa thích. Đây là mã của tôi:Công việc Sidekiq bị kẹt trong hàng đợi trên Heroku

config/unicorn.rb:

Sidekiq.configure_client do |config| 
    config.redis = { size: 1, namespace: 'sidekiq' } 
end 

config/initializers/redis.rb

uri = URI.parse(ENV["REDISTOGO_URL"] || "redis://localhost:6379") 
REDIS = Redis.new(:url => ENV['REDISTOGO_URL']) 

Procfile

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb 
worker: bundle exec sidekiq -c 5 -v -q default 

tôi có thể thấy được công việc trong hàng đợi nhưng nó không được xử lý giống như nó cục bộ. Bất kỳ lời khuyên nào đều được đánh giá cao - cảm ơn!

+0

Hãy thử chạy 'Heroku chạy console' và chạy công việc của bạn đồng bộ 'SomeWorker.new .perform (some_arg) ', nó có thể là một lỗi và được lên lịch lại. – Ollie

+0

Xin chào, cảm ơn bạn đã phản hồi nhanh. Chạy trong bảng điều khiển heroku thực hiện các hành động tôi mong đợi (tức là nó tạo ra một người dùng mới với các thông số chính xác); tuy nhiên, tôi không thể thấy bất kỳ bằng chứng nào cho thấy nó hoạt động trong giao diện người dùng web Sidekiq - tức là nó không được xử lý. Có suy nghĩ gì không? –

+0

Một khi tôi nhận được nó để làm việc từ console heroku, chỉ cần ra khỏi tò mò tôi đã cố gắng để chạy công việc đồng bộ từ bên trong ứng dụng của tôi .... Nhưng công việc vẫn gặp khó khăn trong hàng đợi mặc dù tôi đang đi chính xác cùng một đối số . –

Trả lời

6

Không chắc chính xác những gì vấn đề là, nhưng làm theo hướng dẫn này với một số sửa đổi làm việc ra cho tôi: http://manuelvanrijn.nl/blog/2012/11/13/sidekiq-on-heroku-with-redistogo-nano/

Nói tóm lại, tôi chuyển cấu hình vào một initializer sidekiq.rb, và xóa tất cả các url và thông tin không gian tên.

require 'sidekiq' 

Sidekiq.configure_client do |config| 
config.redis = { :size => 1 } 
end 

Sidekiq.configure_server do |config| 
config.redis = { :size => 4 } 
end 

Liên kết hướng dẫn tôi tham chiếu có một máy tính tiện dụng để loại bỏ các giá trị kích thước chính xác. Vẫn không chắc liệu đó là những gì đã vấp ngã tôi hay một số phiên bản xung đột không gian tên được ám chỉ trong câu trả lời của Mark.

Ngoài ra, tôi không sử dụng phần sidekiq.yml của hướng dẫn, vì wiki sidekiq cho biết các phiên bản mới hơn của đường ray không thích nó. Thay vào đó, tôi đặt đồng thời thành 2 trong lệnh bó exec của Procfile, như sau:

worker: bundle exec sidekiq -c 2 

Hy vọng điều này hữu ích cho bất kỳ ai có vấn đề tương tự trong tương lai! Nhờ tất cả những ai đã cố giúp đỡ.

0

Bạn cũng cần định cấu hình máy chủ để sử dụng cùng một không gian tên.

+0

Xin chào Mike, cảm ơn rất nhiều. Tôi đã đi vào phần tùy chọn nâng cao của wiki Sidekiq và tìm thấy ví dụ này: Sidekiq.configure_server do | config | config.redis = {url: 'redis: //redis.example.com: 7372/12', không gian tên: 'mynamespace'} database_url = ENV ['DATABASE_URL'] nếu database_url ENV ['DATABASE_URL'] = "# {database_url}? pool = 25" ActiveRecord :: Cơ sở.establish_connection kết thúc kết thúc Tôi đã nhập nó vào nơi tôi định cấu hình ứng dụng khách, thay đổi url cho url tôi thấy ở dưới cùng của Sidekiq webUI và thay đổi không gian tên để khớp với không gian tên ứng dụng khách. Nhưng không may mắn. –

1

Chỉ cần thêm hai xu của tôi ở đây: trong trường hợp của tôi, tôi đã quên để thêm tên của hàng đợi để config/sidekiq.yml =]

Các vấn đề liên quan