【问题标题】:Using both postgresql and mysql in Rails 3?在 Rails 3 中同时使用 postgresql 和 mysql?
【发布时间】:2012-04-10 14:12:34
【问题描述】:

Rails 在生产中使用的数据库适配器是 PostgreSQL,但我需要查询另一台服务器上的 MySQL 数据库。我在我的 Gemfile 中包含了“mysql2”gem,并且捆绑安装运行良好。

在我的应用程序控制器中,我有 client = Mysql2::Client.new(...),但我得到了未初始化的常量 ApplicationController::Mysql2。

为什么捆绑器不加载 mysql2 gem?我尝试将require 'mysql2' 放在应用程序控制器中,但找不到文件。

注意我使用的是 ruby​​ 1.9.3p125 和 rails 3.2.1

【问题讨论】:

    标签: mysql ruby-on-rails ruby


    【解决方案1】:

    在表示辅助数据库中数据的模型上调用establish_connection。 Rails 应该能解决这个问题。

    Data.establish_connection adapter: 'mysql'  # ...
    

    必须传递的哈希值类似于您的数据库配置文件中的哈希值。查看文档以获取示例。

    【讨论】:

    • 我不需要为这些数据创建模型,我只需要查询数据库获取信息。我根本不需要涉及 Active Record。难道没有办法只与另一个数据库建立连接吗?
    • @Brian,我想你可以直接使用适配器,但你已经尝试过了。我不确定你的方法有什么问题,很遗憾我现在无法测试。
    • @Brian,您是否将gem 'mysql2' 添加到您的Gemfile 中? Bundler 将加载您在此处指定的 gem,无论您安装了什么。
    • 垫子,是的,不幸的是我已经这样做了=/。它包含在应用程序运行的每个环境中。
    【解决方案2】:

    这是一个老问题。但是,假设可以:

    client = Mysql2::Client.new(...)
    

    ...从rails应用程序中,可以成功建立连接(先在控制台中尝试)。然后,我会将 mysql 连接放入 Rails 应用程序的 /lib 目录中的一个类中,然后:

    require 'yourlib'
    

    ..在控制器的顶部。然后你就可以在控制器中使用你的类和方法了。

    您创建的 lib 文件,以及您为使用该 lib 文件编写的代码也可以在 rails 控制台中进行测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 2012-04-18
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多