Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Heroku follow:如何在Rails应用程序中处理多个数据库?_Ruby On Rails_Heroku_Multiple Databases - Fatal编程技术网

Ruby on rails Heroku follow:如何在Rails应用程序中处理多个数据库?

Ruby on rails Heroku follow:如何在Rails应用程序中处理多个数据库?,ruby-on-rails,heroku,multiple-databases,Ruby On Rails,Heroku,Multiple Databases,我们在Heroku上有一个Rails应用程序,我需要为我们的营销人员设置一些分析页面。这似乎是Heroku的典型用例 这两个数据库将共享相同的模型类,我只需要一些操作来查询复制的数据库 在我的应用程序中,处理这种情况的首选方法是什么 谈论特定于类的连接: 还可以设置特定于类的连接。例如,如果 是ActiveRecord::Base,但驻留在不同的数据库中,您可以 只需说“课程”,就可以建立与课程的联系,以及课程的所有内容 子类将使用此连接 我是否应该对所有模型类进行子类化,以指定到辅助数据库的连

我们在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