ruby-on-rails - Heroku 关注 : how to handle multiple databases in a Rails app?

标签 ruby-on-rails heroku multiple-databases

我们在 Heroku 上托管了一个 Rails 应用程序,我需要为我们的营销人员设置一些分析页面。这似乎是 Heroku follow database 的典型用例。

2 个数据库将共享相同的模型类,我只想要一些操作来查询复制的数据库。

在我的应用程序中处理这种情况的首选方法是什么?

ActiveRecord::Base documentation谈论特定于类的连接:

You can also set a class-specific connection. For example, if Course is an ActiveRecord::Base, but resides in a different database, you can just say Course.establish_connection and Course and all of its subclasses will use this connection instead.



我应该将所有模型类子类化以指定与辅助数据库的连接吗? (它甚至会工作吗?)

我也找到了这个 gem ,但它似乎不再维护了.... magic_multi_connections gem ?

最佳答案

所以......我喜欢这个解决方案:

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在将它们用于分析之前,您需要在 Controller 中用于分析的模型上,但我不知道这是否会破坏您对其他正常 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。

关于ruby-on-rails - Heroku 关注 : how to handle multiple databases in a Rails app?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12238915/

相关文章:

ruby-on-rails - Rails 4 - has_one - 无法访问相关模型的属性

heroku - 尝试使用 SQL Alchemy 连接到 Heroku Postgres 时出现 KeyError :'DATABASE_URL'

c# - 为多个客户组合数据库 - 好主意?

php - laravel动态连接多个数据库

javascript - rails : submitting a form without reloading the page

ruby-on-rails - 我如何运行 rake db :migrate in automated deploy with heroku or heroku-api gem?

node.js - 在 Heroku 上遇到主机名/IP 与证书的替代名称不匹配

Node.JS、Express 和 Heroku - 如何处理 HTTP 和 HTTPS?

ruby-on-rails - 建立连接似乎不支持连接

ruby-on-rails - 发送文件 aws s3 载波