[Rails] Sidekiq同一Redis server兩個project衝突處理
前言
當兩個project共用一個redis時,會發現sidekiq work有時候會被吃掉。
處理方式1 - 直接指定切不同db
這時候簡單的處理方式就是加上”/X”數字去區分不同的project
只要到 config/initializers/sidekiq.rb
加入以下行數即可
- 在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來防止衝突發生
參考
- https://codedecoder.wordpress.com/2014/02/27/multiple-project-single-sidekiq-daemon-instance-one-machine/
- https://ruby-china.org/topics/27890
留言