在运行nginx和unicorn的服务器上,我将rails配置为连接到两个不同的数据库。即使是轻负载,对访问第二个rails数据库的端点的Web请求也将返回其他请求的结果。
例如,如果同时呼叫http://example.com/user/111/address
和http://example.com/user/222/address
,有时会为BOTH呼叫返回用户222的地址,有时它会在BOTH呼叫时返回用户111的地址。
地址的要点非常基本。
class UserController < ApplicationController
before_filter :load_user
def address
address = @user.address
render json: address, status: 200
end
private
def load_user
@user = User.find params[:id]
end
end
模型User
和Address
都访问第二个数据库并从连接到该数据库的基类继承:
class OtherDbActiveRecord < ActiveRecord::Base
self.abstract_class = true
establish_connection "#{Rails.env}_other_db"
# Prevent creation of new records and modification to existing records
def readonly?
return true
end
# Prevent objects from being destroyed
def before_destroy
raise ActiveRecord::ReadOnlyRecord
end
end
class User < OtherDbActiveRecord
has_one :address
end
class Address < OtherDbActiveRecord
belongs_to :user
end
是否有一个连接到我错过的第二个数据库的步骤?什么可能导致ActiveRecord返回不同查询的结果?
答案 0 :(得分:0)
OtherDbActiveRecord是一个单个对象。每个ruby类都是一个对象,它是一个单独的对象。当您调用establish_connection时,它会将该(一个)对象的状态设置为给定连接。
尝试使用具有不同类名的重复类。
class User < ActiveRecord::Base
end
class UserOther < OtherDbActiveRecord
end
class Address < ActiveRecord::Base
end
class Address Other < OtherDbActiveRecord
end