2014-02-11 5 views
2

У меня есть приложение Rails 3, которое я развертываю с помощью Capistrano. Недавно я добавил Sidekiq. Он отлично работает в моем развитии. Я размещаю как staging, так и preview на том же сервере, и это предварительный просмотр, который не работает должным образом. Когда я запускаю рабочий на предварительном просмотре, он переходит в стадию и попадает в промежуточную базу данных. Мне недостает конфигурации, чтобы иметь 2 параллельных процесса сосуществования на одном сервере?Rails + Sidekiq: Sidekiq работает в неправильной среде

Вот мой deploy.rb:

require "bundler/capistrano" 
require 'sidekiq/capistrano' #<-- sidekiq 

load "lib/deployer/deployer.rb" 
set :application, "myapp" 
set :scm, :git 
set :repository, ... 
set :scm_passphrase, "" 
defaults 
global_defaults 
set :stages, ["staging", "preview"] 

task :staging do 
    set :rails_env, "staging" 
    set :user, "deployer" 
    server "myserver.com", :app, :web, :db, :primary => true 

    defaults 
end 

task :preview do 
    set :rails_env, "preview" 
    set :user, "deployer" 
    server "myserver.com", :app, :web, :db, :primary => true 

    defaults 
end 

Это непоследовательно. В предварительном просмотре я только что сделал действие, которое запускает рабочего, и 4 раза оно перешло в стадию (я мог видеть как в журнале, так и в консоли), и 1 раз он попадал в превью, как и предполагалось.

Я что-то упустил?

ответ

2

Я думаю, что решение, которое вы ищете, связано с пространством имен.

https://github.com/mperham/sidekiq/wiki/Advanced-Options#wiki-using-sidekiqs-configure-blocks

Это то, что я использую в моем инициализаторе.

Sidekiq.configure_server do |config| 
    config.redis = { url:  'redis://localhost:6379/0', 
        namespace: "sidekiq_#{Rails.application.class.parent_name}_#{Rails.env}".downcase } 
end 

Sidekiq.configure_client do |config| 
    config.redis = { url:  'redis://localhost:6379/0', 
        namespace: "sidekiq_#{Rails.application.class.parent_name}_#{Rails.env}".downcase } 
end 
+0

LOL downvoted для правильного ответа, полученного прямо из документов ... классического. FWIW redis не имеет «среды» как такового, просто разных пространств имен, поэтому вам лучше убедиться, что вы подключаетесь к правильному. – engineerDave

+0

Это работает правильно. Я тестировал. Чтобы также добавить дополнительную информацию к этому ответу, Sidekiq будет запускаться в переменной RAVS_ENV envoronment, если он установлен, или он будет использовать -e [YOUR_ENV], если он установлен в командной строке. Пример: 'bundle exec sidekiq -e production' – user1735921

0

Таким образом, это поможет узнать, что такое действие, а также рабочий и любые настройки, которые вы настроили для Sidekiq. Так как вы используете Capistrano, есть настройки конфигурации для Sidekiq

https://github.com/mperham/sidekiq/wiki/Deployment

Кроме того, это, вероятно, плохое решение, но он может по крайней мере получить вас мимо этого блокпоста. Вы можете установить разные очереди redis, чтобы вы могли создать промежуточную очередь и очередь просмотра. Для того, чтобы реально работать, вы, возможно, придется установить очередь вы не собираетесь использовать частоту проверки 0.

https://github.com/mperham/sidekiq/wiki/Advanced-Options#wiki-queues

В вашем работника, попробуйте добавить

sidekiq_options :queue => QUEUE 

и установить QUEUE = :staging в среде вашего этапа и QUEUE = :preview в среде предварительного просмотра.

Смежные вопросы