少於 1 分鐘閱讀

前言

當兩個project共用一個redis時,會發現sidekiq work有時候會被吃掉。

處理方式1 - 直接指定切不同db

這時候簡單的處理方式就是加上”/X”數字去區分不同的project 只要到 config/initializers/sidekiq.rb 加入以下行數即可

  1. 在project1中,使用0號db ```rb

    [path] config/initializers/sidekiq.rb

    Sidekiq.configure_server do |config| config.redis = { url: ‘redis://localhost:6379/0’ } end

Sidekiq.configure_client do |config| config.redis = { url: ‘redis://localhost:6379/0’ } end


2. 在project2中,使用1號db
```rb
# [path] config/initializers/sidekiq.rb
Sidekiq.configure_server do |config|
  config.redis = { url: 'redis://localhost:6379/1' }
end

Sidekiq.configure_client do |config|
  config.redis = { url: 'redis://localhost:6379/1' }
end

以此類推 請自行確定好db不會重複

處理方式2 - 使用namespace自動切分不同db

另外的處理方式就是加上namespace區分不同的project 只要到 config/initializers/sidekiq.rb 加入以下行數即可

# [path] config/initializers/sidekiq.rb
Sidekiq.configure_server do |config|
  config.redis = { url: 'redis://localhost:6379', namespace: 'YOUR_PROJECT_NAME' }
end

Sidekiq.configure_client do |config|
  config.redis = { url: 'redis://localhost:6379', namespace: 'YOUR_PROJECT_NAME'  }
end

他就能夠自動切換db

某版本後可能要補安裝 gem 'redis-namespace'

補充

使用redis-client去查看實際資料庫,會發現設定了namespace後 他會自動幫你把兩個project切到不同的db來防止衝突發生

參考

  1. https://codedecoder.wordpress.com/2014/02/27/multiple-project-single-sidekiq-daemon-instance-one-machine/
  2. https://ruby-china.org/topics/27890

更新時間:

留言