2009-02-09 65 views
1

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

感谢您的帮助! Roberto

回答

0

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

要修复它,你将不得不稍微改变你的架构,但我没有足够的信息。

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

基本上,如果你有一个小的和固定数量的数据库,最简单的就是使用不同的ruby进程。

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

AppA < ActiveRecord::Base 
Model1 < AppA 
Model2 < AppA 

AppB < ActiveRecord::Base 
Model3 < AppB 

然后就可以调用

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

到不同的数据库。

+0

你也可以添加一个全局互斥体来序列化你的drb请求,但是你会限制速度。 – zimbatm 2009-05-15 10:47:54