Rails: Start Sidekiq na Heroku
Mam problem z uruchomieniem Sidekiq w mojej aplikacji Heroku. Moja aplikacja działa dobrze w rozwoju (i na Heroku bez Sidekiq).
Utworzyłem Procfile z:
worker: bundle exec sidekiq
Jeśli uruchamiam heroku ps
, jedynym procesem jaki widzę jest web.1
.
Czy powinienem zobaczyć jeden dla Sidekiq?
Dostaję błąd:
Redis::CannotConnectError (Error connecting to Redis on localhost:6379)
w moich dziennikach Heroku.
Aktualizacja: znalazłem prawdopodobnie potrzebne heroku addons:add redistogo
. Nadal nie działa. Czuję, że brakuje mi jakiegoś podstawowego konfiguracja.
Czy jest coś, co muszę zrobić, aby uruchomić Redis dla mojej aplikacji Heroku?
Używam Redis/Sidekiq od około dnia, więc jest to dla mnie nowość.
Dzięki!Greg
6 answers
Nie Nie potrzebujesz żadnego config z Heroku dla Sidekiq, wystarczy dodaćredistogo plugin i gotowe. Nie zapomnij przypisać co najmniej 1 worker do swojej aplikacji w konfiguracji Heroku.
Oto mój domyślny Procfile:
web: bundle exec thin start -p $PORT
worker: bundle exec sidekiq -c 5 -v
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
2012-12-19 09:04:46
Warto sprawdzić, czy proces sidekiq został naprawdę uruchomiony za pomocą tej komendy:
heroku ps
Jeśli nie ma workera, może być konieczne uruchomienie tego polecenia:
heroku ps:scale worker+1
Okazuje się, że w interfejsie sieciowym pojawił się błąd polegający na tym, że niektórym członkom zespołu nie wolno było zwiększać liczby pracowników z 0 do 1, mimo że interfejs wydawał się to pokazywać!
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-08-23 22:48:45
Począwszy od sidekiq w wersji 3.0 jest dodatkowy krok, Uruchom heroku config:set REDIS_PROVIDER=REDISTOGO_URL
w konsoli.
Oto proces, którego użyłem dla Rails 4:
W konsoli:
heroku addons:create redistogo
heroku config:set REDIS_PROVIDER=REDISTOGO_URL
W moim Procfile
dodałem:
worker: bundle exec sidekiq
W moim gemfile.rb
dodałem:
gem 'redis'
Dodałem następujący plik, config/initializers/redis.rb
:
uri = ENV["REDISTOGO_URL"] || "redis://localhost:6379/"
REDIS = Redis.new(:url => uri)
Oto link do dokumentów sidekiq.
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
2015-07-03 21:58:31
Wygląda na to, że już prawie jesteś. Może być tak, że wystarczy ustawić REDISTOGO_URL na heroku config ?
heroku config
Powinien pokazać wartość redistogo?
Jeśli skopiujesz to do REDISTOGO_URL to sidekiq powinien działać?
heroku config:add REDISTOGO_URL=<redistogo value>
Edit: Sidekiq użyje obecnie dowolnego z nich: https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/redis_connection.rb#L29-L33
Edit2: Greg ma rację w że nie trzeba dodawać config, jeśli używasz RedisToGo. Ale jeśli używasz openredis lub innych dostawców Redis, musisz dodać REDISTOGO_URL dla Sidekiq
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-02-19 11:36:30
Możesz oczywiście uruchomić sidekiq wraz z bieżącą kolejką zadań.
Nasz Procfile obecnie wygląda tak:
web: bundle exec thin start -R config.ru -e $RAILS_ENV -p $PORT
worker: bundle exec rake jobs:work
sidekiq: bundle exec sidekiq -c 5 -v
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
2014-09-19 16:10:21
Dowiedziałem się, że trzeba skalować proces ręcznie w ten sposób:
heroku ps:scale worker+1
Nie ma sensu skoro mój Procfile powiedział:
web: bundle exec....
worker: bundle exec sidekiq
...i można by oczekiwać, że Heroku uruchomi pracownika automatycznie. W końcu nie musiałem skalować procesu internetowego...
Ponadto możesz mieć problemy z tą linią: worker: bundle exec sidekiq
Dodaj flagi dla concurency:
worker: bundle exec sidekiq -c 5 -v
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-11-06 12:43:20