ruby-on-rails - 连接 Rails 3.1 与多个数据库

标签 ruby-on-rails ruby ruby-on-rails-3 rails-activerecord activeresource

在 ShowNearby,我们一直在进行从 PHP 到 RoR 3.1 的非常大的迁移,我们面临着几个问题,您可能已经解决了这些问题。

我们有大量数据,我们决定将我们的数据库分成几个我们可以单独处理的数据库。比如我们的账号、地点、日志等被拆分到几个数据库中

我们需要迁移、固定装置、模型,才能很好地发挥作用,到目前为止,一切都非常困惑。我们对可接受的解决方案的一些要求:

  • 一个模型应该与其中一个数据库中的一个表相关。
  • rake db:drop - 应该删除我们在 database.yml 中指定的所有数据库环境
  • rake db:create - 应该创建我们在 database.yml 中指定的所有数据库环境
  • rake db:migrate - 应该运行迁移到各种数据库
  • rake db:test - 应该抓取固定装置并将它们放入各种数据库和测试单元/功能/等

我们正在考虑为每个数据库设置单独的 rails 项目并将它们与 ActiveResource 连接,但我们认为这不是很有效。你们中有人曾经处理过类似的问题吗?

最佳答案

对于 Wukerplank 的回答,您还可以像往常一样将连接详细信息放在 database.yml 中,名称如下:

log_database_production:
  adapter: mysql
  host: other_host
  username: logmein
  password: supersecret
  database: logs

然后在你的特殊模型中:

class AccessLog < ActiveRecord::Base
  establish_connection "log_database_#{Rails.env}".to_sym
end

防止那些讨厌的凭据出现在您的应用程序代码中。

编辑:如果你想在多个模型中重用这个连接,你应该创建一个新的抽象类并继承它,因为连接与类紧密耦合(如 hereherehere ),并且将为每个类创建新的连接。

如果是这种情况,请像这样设置:

class LogDatabase < ActiveRecord::Base
  self.abstract_class = true
  establish_connection "log_database_#{Rails.env}".to_sym
end

class AccessLog < LogDatabase
end

class CheckoutLog < LogDatabase
end

关于ruby-on-rails - 连接 Rails 3.1 与多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6122508/

相关文章:

ruby-on-rails-3 - 导轨 3.1 : Do I need to use CoffeeScript?

javascript - Coffeescript 无法在 Assets 管道中工作

ruby-on-rails - Redmine/Ruby/Rails/Postgresql - 无法加载此类文件 -- pg_ext

ruby - 757: 意外的标记在 'ï»Â¿{ (JSON::ParserError)

ruby-on-rails - 如何使用 if 语句包装代码块,这意味着有没有 ruby​​ 方法可以做到这一点?

ruby - Unicorn 在部署后定期无法重新启动 - PID 过时

ruby-on-rails - 在类之间共享 Rspec 测试

ruby-on-rails - (Rails 3) 是否可以在命名路由中对 id 进行硬编码?

ruby-on-rails - 如何检查 'kind_of?' 到 'count' 或在 RSpec 'its' 功能内运行其他方法?

ruby-on-rails - rails : form_for active record object complaining about no index path