Rails + Sidekiq:Sidekiq在错误的环境下运行。

4

我有一个使用Capistrano部署的Rails 3应用程序。最近我添加了Sidekiq。在我的开发环境中它运行得很好。我将“staging”和“preview”两个部署在同一台服务器上,但“preview”无法正常工作。 当我在预览中触发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

这不一致。预览时,我刚刚执行了一个触发工作进程的操作,有4次进入到了staging环境(我可以在日志和控制台中看到),而只有1次像预期的那样进入了预览环境。

我是否漏了什么?

2个回答

6
我认为您需要的解决方案与命名空间有关。
这是我在初始化器中使用的代码: 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

被点踩了,因为回答正确并直接从文档中得出...经典。顺便说一下,Redis本身没有“环境”,只有不同的命名空间,所以你最好确保连接到正确的命名空间。 - engineerDave
这个是正确的。我已经测试过了。为了给这个答案添加更多信息,如果设置了RAILS_ENV环境变量,Sidekiq将在其中运行,否则它将使用-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

在你的 worker 中,尝试添加以下内容。
sidekiq_options :queue => QUEUE

在你的staging环境中设置QUEUE = :staging,在你的preview环境中设置QUEUE = :preview

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接