nginxとunicornを実行しているサーバーで、2つの異なるデータベースに接続するようにレールを構成しています。負荷が軽い場合でも、2番目のRailsデータベースにアクセスするエンドポイントへのWebリクエストは、他のリクエストからの結果を返します。
たとえば、とへの同時呼び出しがhttp://example.com/user/111/address
ある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
両方が2番目のデータベースにアクセスし、そのデータベースに接続する基本クラスから継承します。
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
欠落している2番目のデータベースに接続する手順はありますか?ActiveRecordが別のクエリの結果を返す原因は何ですか?