所以......我喜欢这个解决方案:
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 中,然后将其包含在您的分析或普通模型中。
或者,您可以.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。