【发布时间】:2023-03-17 05:01:01
【问题描述】:
考虑一个multi-tenancy rails 应用程序。我将如何命名空间我的 redis 连接以每个请求为基础,这样每个租户都生活在自己的命名空间中?
多租户
对于多租户,我使用的是apartment gem。通过读出request.host,根据每个请求确定租户。
# config/initializers/apartment.rb
#
Rails.application.config.middleware.use 'Apartment::Elevators::Generic', lambda { |request|
Tenant.find_identifier_by_host(request.host)
}
Redis
Redis 用于sidekiq、redis-analytics,最重要的是,使用redis-rails 进行rails 缓存。
# config/initializers/cache.rb
# http://stackoverflow.com/a/38619281/2066546
#
Rails.application.config.cache_store = :redis_store, {
host: ENV['REDIS_HOST'],
port: '6379',
expires_in: 1.week,
namespace: "#{::STAGE}_cache",
timeout: 15.0
}
Rails.cache = ActiveSupport::Cache.lookup_store(Rails.application.config.cache_store)
# config/initializers/redis_analytics.rb
#
RedisAnalytics.configure do |configuration|
configuration.redis_connection = Redis.new(host: ENV['REDIS_HOST'], port: '6379')
configuration.redis_namespace = "#{::STAGE}_redis_analytics"
end
# config/initializers/sidekiq.rb
#
Sidekiq.configure_server do |config|
config.redis = {host: ENV['REDIS_HOST'], port: '6379', namespace: "#{::STAGE}_sidekiq", timeout: 15.0 }
end
Sidekiq.configure_client do |config|
config.redis = {host: ENV['REDIS_HOST'], port: '6379', namespace: "#{::STAGE}_sidekiq", timeout: 15.0 }
end
非常感谢您提出的任何建议!
【问题讨论】:
标签: ruby-on-rails redis multi-tenant