だから...私はこの解決策が好きです:
module Analytics
class Base < ActiveRecord::Base
self.abstract_class = true
establish_connection ENV['ANALYTICS_DATABASE_URL']
end
class User < Base; end
class Product < Base; end
end
これで、すべてが分析データベース (フォロワー) に接続するモデルができました。
分析アプリと通常のアプリの間でスコープまたはメソッドを共有する必要がある場合は、共有コードを mixin に配置し、それを Analytics または通常のモデルのいずれかに含めることができます。
または、分析に使用する前にコントローラーで分析に使用する必要があるモデルを呼び出すこともできますが.establish_connection
、それによって他の通常の Web 要求に対する接続が混乱するかどうかはわかりません。次のリクエストでの通常のデータベース接続...
更新:別のアイデアが私を襲った:
class UserBase < ActiveRecord::Base
self.abstract_class = true
# all your user model code goes here
end
class User < UserBase
establish_connection(Rails.env) # connect to your normal database
end
class AnalyticsUser < UserBase
self.table_name = 'users'
establish_connection(ENV['ANALYTICS_DATABASE_URL'])
end
これにより、モデルが分析用であろうと通常の Web 要求用であろうと、モデル間ですべてのコードを共有できますが、モデル名に応じて異なる接続を設定できます。
また、補足として、開発環境でフォロワーを設定したくない場合は、development.rb で ENV['ANALYTICS_DATABASE_URL'] を設定するだけです。
ENV['ANALYTICS_DATABASE_URL'] ||= 'postgres://localhost/myapp_development'
そして明らかに、Heroku では、ANALYTICS_DATABASE_URL の構成変数の名前を変更するか、フォロワーの DATABASE_URL が何であれ設定する必要があります。