gpt4 book ai didi

ruby-on-rails - Rails 中类变量的线程安全性 - 这行得通吗?

转载 作者:数据小太阳 更新时间:2023-10-29 07:36:47 27 4
gpt4 key购买 nike

我正在使用 Ruby Money gem在 Multi-Tenancy (SaaS) Rails 应用程序中,我正在寻找一种好方法来将 Money.default_currency 设置为每个请求的帐户首选项。我在使用 Money 类的应用程序中有几个与货币相关的模型。

我在开发中一切正常,但我只是在寻找一些关于解决方案是否对生产产生影响的反馈。

这是我在 ApplicationController 中所做的(为简洁起见删除了不相关的代码):

class ApplicationController < ActionController::Base
before_filter :set_currency

private

def set_currency
Money.default_currency = Money::Currency.new(current_account.present? && current_account.currency.present? ?
current_account.currency : 'USD')
end
end

因此上面的代码会将 default_currency 类变量设置为当前帐户的首选项,或者如果没有则默认返回“USD”。

顺便说一句,这是 Money 类中的相关 default_currency 代码:

class Money

# Class Methods
class << self

# The default currency, which is used when +Money.new+ is called without an
# explicit currency argument. The default value is Currency.new("USD"). The
# value must be a valid +Money::Currency+ instance.
#
# @return [Money::Currency]
attr_accessor :default_currency

end
end

那么,这会在多用户设置中按预期工作吗?我还需要做什么吗?

最佳答案

大多数 Rails 应用程序不在多线程模式下运行 - 给定实例一次只处理一个请求(这是默认设置)。

如果您的应用程序处于多线程模式,这将是危险的 - Money.default_currency 可能会在请求中途被刚刚进入的新请求更改。如果您确实想要创建此线程安全,您可以使用 Thread.current 散列来获得每个线程的 default_currency

关于ruby-on-rails - Rails 中类变量的线程安全性 - 这行得通吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9083525/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com