加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails中类变量的线程安全 – 这会起作用吗?

发布时间:2020-12-17 02:12:46 所属栏目:百科 来源:网络整理
导读:我在多租户(SaaS)Rails应用程序中使用 Ruby Money gem,并且正在寻找一种好的方法来将Money.default_currency设置为帐户对每个请求的首选项.我在应用程序中有几个与货币相关的模型使用Money类. 我在开发过程中一切正常,但我只是在寻找一些关于解决方案是否会
我在多租户(SaaS)Rails应用程序中使用 Ruby Money gem,并且正在寻找一种好的方法来将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值

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读