【问题标题】:Thread problem with Druby and ActiveRecordDruby 和 ActiveRecord 的线程问题
【发布时间】:2009-02-09 14:53:33
【问题描述】:

我有一个 rails 应用程序和一个单独的 druby 进程。这个过程给了我一些方法,在每个 druby 方法的第一行都有一个对 ActiveRecord::Base.establish_connection 的调用,其中 db_name 取决于 rails 应用程序设置的参数。 有时该进程获取错误的数据库名称,我认为这可能是一个并发问题。可以吗?关于如何使其线程安全的任何想法?

感谢您的帮助! 罗伯托

【问题讨论】:

    标签: ruby-on-rails ruby druby


    【解决方案1】:

    是的,这是一个并发问题。

    要修复它,您必须稍微更改架构,但我没有足够的信息。

    • 在后端运行的代码是否与在您的 rails 应用程序中运行的代码相同?
    • 您的不同数据库是否使用相同的模型?
    • 您有多少个不同的数据库?这个数字会增长吗?

    基本上,如果您有少量且固定数量的数据库,最简单的方法是使用不同的 ruby​​ 进程。

    如果您有不同模型的不同数据库,您可以设想使用不同的基类:

    AppA < ActiveRecord::Base
    Model1 < AppA
    Model2 < AppA
    
    AppB < ActiveRecord::Base
    Model3 < AppB
    

    然后就可以调用了

    AppA.establish_connection(...)
    AppB.establish_connection(...)
    

    到不同的数据库。

    【讨论】:

    • 你也可以添加一个全局的 Mutex 来序列化你的 drb 请求,但是你会限制速度。
    猜你喜欢
    • 2010-09-16
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    相关资源
    最近更新 更多