我正在尝试在 Passenger/Rails 生产环境中设置 Redis + Sidekiq,但遇到了一些困惑。
服务器上运行着许多小型应用程序。我敢肯定,这些应用程序中不止一款会利用 Sidekiq 提供的延迟处理。
我的第一个想法是使用 namespace option in Sidekiq为每个 Rails 应用程序创建一个 namespace
。
但后来我注意到 redis.conf
中有一个 databases 16
设置,我想知道它到底做了什么。除了配置中的注释,我似乎找不到关于它的文档:
# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16
那么,想知道 16 个“数据库”的默认/示例是否意味着我可以将 DB0 用于一个应用程序而将 DB1 用于另一个应用程序?!?我不认为这个假设是正确的,但我找不到更多信息,除了:
Redis Cluster does not support multiple databases like the stand alone version of Redis, there is just database 0, and SELECT is not allowed.
希望有人可以建议我如何在同一台服务器上运行的各种 Rails 应用程序之间共享 Sidekiq 和 Redis。
最佳答案
您可以使用多个 Redis 数据库;每个都与一台机器上的 Rails 应用程序相关联。您可以使用以下代码将文件 sidekiq.rb 放入初始化程序中:
app_name = Rails.application.class.parent_name
app_num = case app_name
when 'AppOne'
0
when 'AppTwo'
1
when 'AppOne'
2
end
Redis.new(db: app_num) # existing DB is selected if already present
Sidekiq.configure_server do |config|
config.redis = { url: "redis://localhost:6379/#{app_num}", namespace: "#{app_name}" }
end
Sidekiq.configure_client do |config|
config.redis = { url: "redis://localhost:6379/#{app_num}", namespace: "#{app_name}" }
end
通过这种方式,您可以通过 Sidekiq 进程分离出 Redis 数据库和命名空间。
关于ruby-on-rails - 在生产环境中配置 Redis + Sidekiq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14742020/