2014-10-08 14 views
6

Mam pracownika Sidekiq działa dobrze lokalnie, ale po wdrożeniu do Heroku zadania utknąć w kolejce. Używam Redis-to-go nano i mam je uruchomione, a ja przeskalowałem robotnika na 1 na Heroku i widzę, że jest. Używam tylko domyślnej kolejki - nic niestandardowego ani wymyślnego. Tu jest mój kodu:Praca Sidekiq utknęła w kolejce na Heroku

config/unicorn.rb:

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

config/inicjalizatory/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 

widzę pracę w w kolejce, ale nie jest to przetwarzanie podobne do lokalnego. Każda rada jest doceniana - dziękuję!

+0

Spróbuj uruchomić 'Heroku uruchomić console' i uruchomić zadanie synchronicznie' SomeWorker.new .perform (some_arg) ', może to oznaczać błąd i zostać przełożony. – Ollie

+0

Cześć, dziękuję za szybką odpowiedź. Uruchomienie w konsoli Heroku wykonało oczekiwane działania (tj. Wygenerowało nowego użytkownika z poprawnymi parametrami); nie widzę jednak żadnych dowodów na to, że działało ono w interfejsie WWW Sidekiq - to znaczy, że nie było ani zakoloryzowane, ani przetworzone. jakieś pomysły? –

+0

Kiedy dostałem go do pracy z konsoli Heroku, po prostu z ciekawości próbowałem uruchomić zadanie synchronicznie z poziomu mojej aplikacji .... Ale zadania wciąż utkną w kolejce, mimo że przekazuję dokładnie te same argumenty . –

Odpowiedz

6

Nie wiem dokładnie, na czym polega problem, ale po tym kursie z pewnymi modyfikacjami pracował dla mnie: http://manuelvanrijn.nl/blog/2012/11/13/sidekiq-on-heroku-with-redistogo-nano/

W skrócie, przeprowadziłem konfigurację do inicjatora sidekiq.rb i usunięte wszystkie url i informacje o przestrzeni nazw.

require 'sidekiq' 

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

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

Link do samouczka, do którego się odwołałem, zawiera podręczny kalkulator do odczytywania prawidłowych wartości wielkości. Wciąż nie jestem pewien, czy to właśnie mnie potknęło, czy też w odpowiedzi Marka na jakąś wersję konfliktu przestrzeni nazw.

Ponadto, nie korzystałem z części samouczka sidekiq.yml, ponieważ wiki sidekiq mówi, że nowsze wersje szyn nie lubią tego. Zamiast ustawić współbieżność do 2 w poleceniu wiązki exec z Procfile, tak:

worker: bundle exec sidekiq -c 2 

nadzieję, że to jest pomocny każdemu, kto ma podobny problem w przyszłości! Dziękuję wszystkim, którzy próbowali pomóc.

0

Musisz skonfigurować serwer, aby używał tej samej przestrzeni nazw.

+0

Cześć Mike, dziękuję bardzo. Poszedłem do części zaawansowanych opcji wiki Sidekiq i znalazłem ten przykład: Sidekiq.configure_server do | config | config.redis = {URL: 'REDIS: //redis.example.com: 7372/12' namespace: 'MyNamespace'} database_url = ENV jeżeli [ 'DATABASE_URL'] database_url ENV [ 'DATABASE_URL'] = "# {database_url}? pool = 25" ActiveRecord :: Base.establish_connection koniec koniec Wprowadziłem go tam, gdzie konfiguruję klienta, zmieniając adres URL dla URL'a, który widzę na dole mojego Sidekiq webUI, i zmieniając przestrzeń nazw tak, aby pasowała do przestrzeni nazw klienta. Ale bez powodzenia. –

1

Wystarczy dodać swoje trzy grosze tutaj: w moim przypadku, zapomniał dodać nazwę kolejki do config/sidekiq.yml =]