Ruby on rails 轨道&x2B;Sidekiq:Sidekiq在错误的环境中运行

Ruby on rails 轨道&x2B;Sidekiq:Sidekiq在错误的环境中运行,ruby-on-rails,Ruby On Rails,我有一个Rails 3应用程序,我使用Capistrano进行部署。我最近添加了Sidekiq。它在我的开发中运行良好。我在同一台服务器上托管了暂存和预览,但预览功能不正常。当我在预览时触发worker时,它将转到staging并点击staging数据库。我是否缺少在同一台服务器上共存2个sidekiq进程的配置 这是我的deploy.rb: require "bundler/capistrano" require 'sidekiq/capistrano' #<-- sidekiq lo

我有一个Rails 3应用程序,我使用Capistrano进行部署。我最近添加了Sidekiq。它在我的开发中运行良好。我在同一台服务器上托管了
暂存
预览
,但预览功能不正常。当我在预览时触发worker时,它将转到staging并点击staging数据库。我是否缺少在同一台服务器上共存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
需要“bundler/capistrano”
要求“sidekiq/capistrano”#正确
默认值
结束
任务:预览
设置:rails_env,“预览”
集合:用户,“部署者”
服务器“myserver.com”,:app,:web,:db,:primary=>true
默认值
结束
这是不一致的。在preview中,我只是做了一个触发worker的操作,4次它进入了staging(我可以在日志和控制台中看到),1次它像预期的那样点击preview


我遗漏了什么吗?

因此,查看操作内容、工作人员以及您为Sidekiq设置的任何配置都会有所帮助。既然您使用的是Capistrano,您是否已经为Sidekiq设置了配置

此外,这可能是一个糟糕的解决方案,但它至少可以让你克服这个障碍。您可以设置不同的redis队列,以便创建暂存队列和预览队列。要使其实际工作,您可能必须将不使用检查频率的队列设置为0

在worker中,尝试添加

sidekiq_options :queue => QUEUE

并在暂存环境中设置
QUEUE=:staging
,在预览环境中设置
QUEUE=:preview

我认为您正在寻找的解决方案与命名空间相关

这是我在初始化器中使用的

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

LOL否决了直接从文档中得出的正确答案。。。经典FWIW redis本身没有“环境”,只是不同的名称空间,所以你最好确保你连接到了正确的名称空间。这是正确的。我做了测试。为了给这个答案添加更多信息,Sidekiq将在RAILS_ENV environment变量中运行(如果已设置),或者在命令行中设置了-e[YOUR_ENV]。示例:
bundle exec sidekiq-e生产