Ruby on rails Heroku follow:如何在Rails应用程序中处理多个数据库?
我们在Heroku上有一个Rails应用程序,我需要为我们的营销人员设置一些分析页面。这似乎是Heroku的典型用例 这两个数据库将共享相同的模型类,我只需要一些操作来查询复制的数据库 在我的应用程序中,处理这种情况的首选方法是什么 谈论特定于类的连接: 还可以设置特定于类的连接。例如,如果 是ActiveRecord::Base,但驻留在不同的数据库中,您可以 只需说“课程”,就可以建立与课程的联系,以及课程的所有内容 子类将使用此连接 我是否应该对所有模型类进行子类化,以指定到辅助数据库的连接?(它会起作用吗?)Ruby on rails Heroku follow:如何在Rails应用程序中处理多个数据库?,ruby-on-rails,heroku,multiple-databases,Ruby On Rails,Heroku,Multiple Databases,我们在Heroku上有一个Rails应用程序,我需要为我们的营销人员设置一些分析页面。这似乎是Heroku的典型用例 这两个数据库将共享相同的模型类,我只需要一些操作来查询复制的数据库 在我的应用程序中,处理这种情况的首选方法是什么 谈论特定于类的连接: 还可以设置特定于类的连接。例如,如果 是ActiveRecord::Base,但驻留在不同的数据库中,您可以 只需说“课程”,就可以建立与课程的联系,以及课程的所有内容 子类将使用此连接 我是否应该对所有模型类进行子类化,以指定到辅助数据库的连
我也发现了这颗宝石,但它似乎不再保存了 所以。。。我喜欢这个解决方案:
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
这允许您在模型之间共享所有代码,无论它们是用于分析还是普通web请求,但根据模型名称设置不同的连接
另外,作为旁注,如果您不想在开发环境中设置跟随者,只需在development.rb中设置ENV['ANALYTICS_DATABASE_URL']:
ENV['ANALYTICS_DATABASE_URL'] ||= 'postgres://localhost/myapp_development'
显然,在Heroku上,您需要将您的分析数据库URL的配置变量重命名或设置为追随者的数据库URL。为了更好地回答这个问题:Heroku现在发布了一个“官方”方法,使用: 使用此gem,可以创建完全复制的模型,或仅在跟随器上执行块:
Octopus.using(:slave_two) do
User.create(:name => "Mike")
end
从我的理解来看,这解释了如何访问存储在不同数据库中的不同模型。这是不同的情况:我将有一个辅助数据库,它是主数据库的只读副本。如果我采用这种方法,我需要对所有模型类进行子类化……如果采用这种方法(更新中的方法),那么将创建多个连接池,因为Rails在每次调用“建立连接”方法时都会创建一个连接池。更好的方法是让它保持第一次的状态,将连接放在用户库中。
Octopus.using(:slave_two) do
User.create(:name => "Mike")
end