(см. ниже мою подробную конфигурацию, которая является результатом ответа Хенли Чиу).
Я пытаюсь объединить мой мозг вокруг развертываний Sidekiq, и я не понимаю его. У меня есть приложение с промежуточной средой и рабочей средой на одном сервере. Все, что я вижу о развертываниях sidekiq, в основном говорит "просто добавьте sidekiq/capistrano в файл развертывания", поэтому я сделал это. И тогда инструкции "здесь yml файл с параметрами", но ничего не объясняется. Мне нужны пространства имен? Я вижу это в файле инициализации, но, похоже, это указывает на внешний сервер.
Я развернулся раньше, и каждый этап, похоже, загружает sidekiq с соответствующей средой, но они оба обрабатываются из одних и тех же очередей. Мои письма от производства пытались обработать сценой sidekiq и не удалось. На данный момент я остановил свою сцену, но в итоге мне нужно будет использовать ее снова. Надеюсь, что я не плотный, я действительно пытался понять это, и мне очень трудно найти окончательное "здесь, как это делается".
Для чего это стоит, здесь config/sidekiq.yml(который загружается отлично во время развертывания):
:concurrency: 5
:verbose: false
:pidfile: ./tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log
:queues:
- [carrierwave, 7]
- [client_emails, 5]
- [default, 3]
staging:
:concurrency: 10
production:
:concurrency: 25
Файлы журналов, а pids, похоже, находятся в нужном месте, но очереди просто сливаются. Любая помощь будет БОЛЬШОЙ!
Кроме того, если это имеет значение:
Rails 3.2.11, passenger, nginx, rvm, Ubuntu 12.10, and Ruby 1.9.3
Подробная конфигурация (ответ):
Сначала я установил новый сервер redis на порт 7777 (или любой другой порт, который вы, кроме 6379 по умолчанию). В значительной степени после redis quickstart guide, который я использовал в первый раз.
Затем я сделал файл инициализатора; это имеет как клиент, так и конфигурацию сервера. Оба требуют, чтобы sidekiq работал многоступенчато.
Обратите внимание, что я использую внешний файл YAML для настроек. Я использую SettingsLogic, чтобы сделать это проще, но вы можете так же легко сделать это самостоятельно, включив файл. Используя файл yaml, нам не нужно касаться наших сред/промежуточных или производственных файлов.
# config/initializers/sidekiq.rb
server = Settings.redis.server
port = Settings.redis.port
db_num = Settings.redis.db_num
namespace = Settings.redis.namespace
Sidekiq.configure_server do |config|
config.redis = { url: "redis://#{server}:#{port}/#{db_num}", namespace: namespace }
end
Я использую пассажира - страница страницы устранения неполадок sidekiq wiki рекомендует изменить настройку при использовании единорога или пассажира, поэтому я добавил код для настройки клиента:
# config/initializers/sidekiq.rb (still)
if defined?(PhusionPassenger)
PhusionPassenger.on_event(:starting_worker_process) do |forked|
Sidekiq.configure_client do |config|
config.redis = { url: "redis://#{server}:#{port}/#{db_num}", namespace: namespace }
end if forked
end
end
Это мой файл настроек (очевидно, измененные значения):
#config/settings.yml
defaults: &defaults
redis: &redis_defaults
server: 'localhost'
port: 6379
db_num: 0
namespace: 'sidekiq_development'
development:
<<: *defaults
test:
<<: *defaults
staging:
<<: *defaults
redis:
<<: *redis_defaults
port: 8888
namespace: 'sidekiq_staging'
production:
<<: *defaults
redis:
<<: *redis_defaults
port: 7777
namespace: 'sidekiq_production'
Я обнаружил, что добавление пространства имен в файл config/sidekiq.yml, похоже, не работает - sidekiq будет загружаться при развертывании с использованием правильного порта, но фактически ничего не обработает. Но поскольку wiki рекомендует использовать пространство имен, я просто добавил его в файл init.
Я надеюсь, что это будет полезно для других, потому что мне было очень сложно понять, не делали этого раньше.