【问题标题】:how to make rails external database calls?如何进行 Rails 外部数据库调用?
【发布时间】:2011-01-18 18:10:17
【问题描述】:

所以我希望能够向我的config/database.yml 添加一个外部数据库,然后从中建模一个表。

这可能吗?我一直无法弄清楚如何。

"连接不同模型的多个数据库

连接通常通过ActiveRecord::Base.establish_connection 创建并通过ActiveRecord::Base.connection 检索。从ActiveRecord::Base 继承的所有类都将使用此连接。但您也可以设置特定于类的连接。例如,如果CourseActiveRecord::Base,但驻留在不同的数据库中,您可以只说Course.establish_connectionCourse,它的所有子类都将使用此连接。

此功能是通过在ActiveRecord::Base 中保留一个连接池来实现的,该连接池是一个由类索引的哈希。如果请求连接,retrieve_connection 方法将在类层次结构中向上,直到在连接池中找到连接。 "

【问题讨论】:

    标签: ruby-on-rails database


    【解决方案1】:

    首先,在database.yml中定义连接信息:

    my_external_db:
      adapter: mysql
      username: ...
      ....
    

    然后,创建模型并将其连接到外部数据库

    class MyExternalModel < ActiveRecord::Base
      establish_connection(:my_external_db)
      set_table_name 'my_external_table'
    end
    

    【讨论】:

    • 之后我必须关闭连接吗?
    • @Kirby:我认为您不会想要这样做,否则 Rails 将不得不为每个请求打开一个新连接。这里只在服务器启动时执行一次。
    • 非常感谢您!正在尝试将我的 Rails 应用程序连接到外部数据库。很有帮助。
    • 使用 Heroku 时要小心。 Heroku 丢弃了 database.yml 文件,因此您必须找到其他地方来定义连接信息。
    【解决方案2】:

    set_table_name 已被删除,因此您应该使用:self.table_name

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多