我有一个使用Capistrano部署的Rails 3应用程序。我最近添加了Sidekiq。它在我的开发中工作得很好。我在同一台服务器上托管staging
和preview
,并且预览无法正常运行。当我在预览时触发工作程序时,它会转到暂存并命中登台数据库。我是否缺少配置以使2个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
这是不一致的。在预览中,我刚刚执行了一个触发工作人员的操作,并进行了四次分段(我可以在日志和控制台中看到),并且有一次它按预期进行预览。
我错过了什么吗?
答案 0 :(得分:3)
我认为您正在寻找的解决方案与命名空间相关。
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
答案 1 :(得分: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
。