Подтвердить что ты не робот

Rails: запуск Sidekiq на Heroku

У меня возникла проблема с запуском Sidekiq в моем приложении Rails с поддержкой Heroku. У меня есть приложение, прекрасно работающее в разработке (и на Heroku без Sidekiq).

Я создал файл Procfile с:

worker: bundle exec sidekiq

Если я запустил heroku ps, единственный процесс, который я вижу, - web.1.

Должен ли я увидеть его для Sidekiq?

Я получаю сообщение об ошибке:

Redis::CannotConnectError (Error connecting to Redis on localhost:6379) в моих журналах Heroku.

UPDATE: найдено Мне, вероятно, понадобилось heroku addons:add redistogo. Все еще не работает. Я чувствую, что мне не хватает базовой конфигурации.

Есть ли что-то, что мне нужно сделать, чтобы запустить Redis для моего приложения Heroku?

Я использую Redis/Sidekiq около дня, так что это ново для меня.

Спасибо!

Грег

4b9b3361

Ответ 1

Нет, вам не нужна настройка с Heroku для Sidekiq, просто добавьте плагин RedisToGo, и вы включитесь. Не забудьте указать как минимум 1 работника для вашего приложения в конфигурацию Heroku.

Вот мой файл по умолчанию:

web: bundle exec thin start -p $PORT
worker: bundle exec sidekiq -c 5 -v

Ответ 2

Стоит проверить, действительно ли процесс sidekiq начинается с этой команды:

heroku ps

Если нет работника, вам может потребоваться выполнить следующую команду:

heroku ps:scale worker+1

Оказалось, что в веб-интерфейсе есть ошибка в том, что некоторым членам команды не разрешалось увеличивать число работников от 0 до 1, хотя пользовательский интерфейс, казалось, показывал это!

Ответ 3

Начиная с sidekiq версии 3.0 есть дополнительный шаг, запустите heroku config:set REDIS_PROVIDER=REDISTOGO_URL в консоли.

Вот процесс, который я использовал для Rails 4:

В консоли:

heroku addons:create redistogo
heroku config:set REDIS_PROVIDER=REDISTOGO_URL

В моем Procfile я добавил:

worker: bundle exec sidekiq

В моем gemfile.rb я добавил:

gem 'redis'

Я добавил следующий файл, config/initializers/redis.rb:

uri = ENV["REDISTOGO_URL"] || "redis://localhost:6379/"
REDIS = Redis.new(:url => uri)

Вот ссылка в документах sidekiq.

Ответ 4

Похоже, ты почти там. Возможно, вам просто нужно установить REDISTOGO_URL в config_ganger...

heroku config 

должно показать значение redistogo?

Если вы скопируете это в REDISTOGO_URL, то sidekiq должен работать?

heroku config:add REDISTOGO_URL=<redistogo value>

Edit: Sidekiq будет использовать любой из них в настоящее время: https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/redis_connection.rb#L29-L33

Edit2: Грег прав, потому что вам не нужно добавлять конфигурацию, если вы используете RedisToGo. Но если вы используете OpenRedis или другие поставщики Redis, вам нужно добавить REDISTOGO_URL для Sidekiq

Ответ 5

Вы можете, конечно, запустить sidekiq вместе со своей текущей очередью заданий.

В настоящее время наш Procfile выглядит следующим образом:

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

Ответ 6

Что я выяснил, так это то, что вы должны вручную масштабировать процесс следующим образом:

heroku ps:scale worker+1

Не имеет смысла, так как мой Procfile сказал:

web: bundle exec....
worker: bundle exec sidekiq

... и можно было бы ожидать, что Heroku начнет работу автоматически. В итоге мне не пришлось масштабировать веб-процесс...

Кроме того, у вас могут быть проблемы с этой строкой:   worker: bundle exec sidekiq

Добавьте флаги для согласованности:

worker: bundle exec sidekiq -c 5 -v