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?
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.
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
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
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.
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