Sidekiq nie przetwarza kolejki

Jakie możliwe powody mogą Sidekiq uniemożliwić przetwarzanie zadań w kolejce? Kolejka jest pełna. Plik dziennika sidekiq.log nie wskazuje żadnej aktywności. Tak więc kolejka jest pełna, ale dziennik jest pusty, a Sidekiq nie przetwarza elementów. Nie wydaje się, aby pracownik przetwarzał zadania. Ponowne uruchomienie Redis lub spłukanie za pomocą FLUSHALL lub FLUSHDB jako żadnego efektu. Sidekiq został uruchomiony z

Bundle exec sidekiq - l log/sidekiq.log

Oraz tworzy następujący plik dziennika:

2013-05-30..Booting Sidekiq 2.12.0 using redis://localhost:6379/0 with options {}
2013-05-30..Running in ruby 1.9.3p374 (2013-01-15 revision 38858) [i686-linux]
2013-05-30..See LICENSE and the LGPL-3.0 for licensing details.
2013-05-30..Starting processing, hit Ctrl-C to stop

Jak możesz dowiedzieć się, co poszło nie tak? Czy są jakieś ukryte pliki dziennika?

Author: 0x4a6f4672, 2013-05-30

4 answers

Powód był w naszym przypadku: Sidekiq może szukać niewłaściwej kolejki. Domyślnie Sidekiq używa kolejki o nazwie "default". Użyliśmy dwóch różnych nazw kolejek i zdefiniowaliśmy je w config / sidekiq.yml

# configuration file for Sidekiq
:queues:
  - queue_name_1
  - queue_name_2

Problem polega na tym, że ten plik konfiguracyjny nie jest domyślnie ładowany automatycznie w Twoim środowisku programistycznym (w przeciwieństwie do database.yml lub thinking_sphinx.yml) przez proste polecenie bundle exec sidekiq. Tak więc pisaliśmy nasze zadania w dwóch określonych kolejkach, a Sidekiq czekał na zadania w trzeciej kolejce (domyślna). Musisz przekazać ścieżkę do pliku konfiguracyjnego jako parametr za pomocą opcji -C lub --config:

bundle exec sidekiq -C ./config/sidekiq.yml

Lub możesz podać nazwy kolejki bezpośrednio (bez spacji po przecinku):

bundle exec sidekiq -q queue_name_1,queue_name_2

Aby znaleźć problem, pomocne jest podanie opcji -v lub --verbose również w wierszu poleceń lub użycie :verbose: true w pliku sidekiq.yml. Wszystko, co jest zdefiniowane w pliku konfiguracyjnym, jest oczywiście bezużyteczne, jeśli plik konfiguracyjny nie jest ładowany.. Dlatego upewnij się, że najpierw używasz odpowiedniego pliku konfiguracyjnego.

 108
Author: 0x4a6f4672,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-30 13:30:45

Jeśli nie masz pewności co do nazw swoich kolejek, możesz to rozgryźć za pomocą następującego skryptu:

require "sidekiq/api"
stats = Sidekiq::Stats.new
stats.queues
# {"production_mailers"=>25, "production_default"=>1}

Wtedy możesz robić rzeczy z kolejkami:

queue = Sidekiq::Queue.new("production_mailers")
queue.count
queue.clear
 5
Author: Edgar Ortega,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-29 19:26:50

Właśnie miałem ten problem. Okazało się, że popełniłem błąd składni w moim sidekiq.yml

 1
Author: jellymann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-04 19:23:38

Przez jakiś czas walałem głową o ceglaną ścianę, mój problem polegał na tym, że sidekiq wymagał nowszej wersji redis-Servera. Uruchomiłem "bundle exec sidekiq" i to ujawniło błąd. Po zaktualizowaniu do nowszej wersji redis-server było w porządku.

 -2
Author: Elliott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-27 12:57:52