所以...我是這樣解決的:
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請求,要求您設置爲開啓下一個請求你正常的數據庫連接...
UPDATE:另一個想法只是讓我吃驚:
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請求sts,但根據型號名稱設置不同的連接。
此外,作爲一個旁註,如果你不希望建立一個跟隨在你的開發環境,只需設置ENV [「ANALYTICS_DATABASE_URL」]在您的development.rb:
ENV['ANALYTICS_DATABASE_URL'] ||= 'postgres://localhost/myapp_development'
而且很明顯,在Heroku上,你需要重命名或設置配置VAR爲您ANALYTICS_DATABASE_URL到任何你跟隨的DATABASE_URL是。
見http://stackoverflow.com/questions/6122508/connecting-rails-3-1-with-multiple-databases – apneadiving
從我的理解這解釋瞭如何訪問不同不同的模型存儲在不同的數據庫中。這是不一樣的情況:我會有一個從主數據庫只讀副本的輔助數據庫。如果我遵循這個方法,我需要繼承我所有的模型類... – vdaubry