在运行 nginx 和 unicorn 的服务器上,我将 rails 配置为连接到两个不同的数据库。即使在轻负载下,对访问第二个 rails 数据库的端点的 Web 请求也会返回来自其他请求的结果。
例如,如果同时调用http://example.com/user/111/address
and http://example.com/user/222/address
,有时用户 222 的地址将在两个调用中返回,有时它会在两个调用中返回用户 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 返回不同查询的结果?