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值 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |