4

在运行 nginx 和 unicorn 的服务器上,我将 rails 配置为连接到两个不同的数据库。即使在轻负载下,对访问第二个 rails 数据库的端点的 Web 请求也会返回来自其他请求的结果。

例如,如果同时调用http://example.com/user/111/addressand 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 

模型UserAddress都访问第二个数据库并从连接到该数据库的基类继承:

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 返回不同查询的结果?

4

1 回答 1

0

OtherDbActiveRecord 是单个对象。每个 ruby​​ 类都是一个对象,而且它是一个单独的对象。当您调用建立连接时,它会将那个(一个)对象的状态设置为给定的连接。

尝试让每个具有不同类名的重复类。

class User < ActiveRecord::Base
end

class UserOther < OtherDbActiveRecord
end

class Address < ActiveRecord::Base
end

class Address Other < OtherDbActiveRecord
end
于 2012-09-17T23:17:46.740 回答