Ruby on rails Rails多租户应用程序中全局变量的替代方案是什么?
我正在将我的应用程序(单客户端)转换为多租户应用程序 我曾经将一些设置(很少更改/非常频繁访问)存储到一个全局变量(散列)中。 当应用程序启动时,此全局变量的值已从数据库中取出。 显然,这些设置是特定于客户端/租户的 我现在看到了一些选择,但没有一个是好的:Ruby on rails Rails多租户应用程序中全局变量的替代方案是什么?,ruby-on-rails,heroku,multi-tenant,Ruby On Rails,Heroku,Multi Tenant,我正在将我的应用程序(单客户端)转换为多租户应用程序 我曾经将一些设置(很少更改/非常频繁访问)存储到一个全局变量(散列)中。 当应用程序启动时,此全局变量的值已从数据库中取出。 显然,这些设置是特定于客户端/租户的 我现在看到了一些选择,但没有一个是好的: 保留全局散列,但引入租户的概念$global[:client1][:settingX],但这感觉不太好/可伸缩/安全 每次都给数据库打电话,但我担心性能会受到影响(~40个额外的数据库电话) 我能用Memcache做些什么吗?但我不知道
- 保留全局散列,但引入租户的概念
,但这感觉不太好/可伸缩/安全$global[:client1][:settingX]
- 每次都给数据库打电话,但我担心性能会受到影响(~40个额外的数据库电话)
注意:应用程序托管在Heroku上,这听起来是使用memcached或redis的一个很好的理由。你想要一个集中的地方,让所有的应用服务器都可以访问这些值。您的用例主要是读取,偶尔会写入以更新值 我将构建一个货币助手,每个请求延迟从memcached/redis加载一次,然后保存货币汇率数据,以便在该请求中进行任何值计算 我不知道您的问题域,但假设您试图为系统中的不同用户提供本地货币定价,并且不同用户的费率不同(例如:折扣等) 在控制器代码中:
def currency_helper
@currency_helper ||= CurrencyHelper.new(current_user.id)
end
def show
localized_price = currency_helper.convert_from_usd_to(price_usd, params[:country_code])
end
为什么会是40个DB调用?在这个典型示例中:因为我需要执行40个货币转换。因此,如果使用同一种货币两次,其中一些可能会被缓存,但我不能依赖这个假设。我可以一次性加载所有必要的汇率,但那根本不现实。。。
def currency_helper
@currency_helper ||= CurrencyHelper.new(current_user.id)
end
def show
localized_price = currency_helper.convert_from_usd_to(price_usd, params[:country_code])
end