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

Author: Flip, 2012-12-08

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
 50
Author: gdurelle,
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ć!

 32
Author: justingordon,
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.

 15
Author: Steve,
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

 1
Author: gef,
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
 1
Author: superluminary,
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
 1
Author: luigi7up,
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