【问题标题】:How to Use Multiple Databases in a Rails App Using the database.yml如何使用 database.yml 在 Rails 应用程序中使用多个数据库
【发布时间】:2012-04-28 04:55:05
【问题描述】:

我已阅读有关如何执行此操作的文档,但在实践中,我遇到了问题。 在我的应用程序中,我的 database.yml 文件中有 2 个不同的数据库,如下所述。

sqlite_test:
    adapter: sqlite3
    database: db/sqlite_test.sqlite3
    table: plots
    pool: 5
    timeout: 5000

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: test
  pool: 5
  username: myname
  password: mypassword
  host: localhost

我的应用程序是一个动态绘图仪,它将在(基本)数据库中绘制数据,而无需了解数据库中的内容或其结构。这两个数据库都包含不同的数据。我在单独的 Rails 应用程序中创建的 SQLite 数据库。

我正在使用的当前应用程序是围绕我在外部构建的 MYSQL 数据库构建的。 我将 SQLite 数据库复制到 /db 目录中。所以在我的主要模型中,当我说:

  class Plot < ActiveRecord::Base

  establish_connection :development
  set_table_name "stock_test"
  set_primary_key :id

一切都很好,花花公子。但是,当我将其更改为:

 establish_connection :sqlite_test
 set_table_name "plots"

并尝试通过 Rails 控制台访问该数据库,我收到一条错误消息:

>>ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter

我不知道为什么会这样,因为 database.yml 文件明确指定了一个适配器? 但是,当我在我的模型中手动执行此操作时,一切都按应有的方式工作。

class Plot < ActiveRecord::Base
establish_connection(:adapter => "sqlite3", :database => "db/sqlite_test.sqlite3", :pool => 5 )

为什么当我手动指定 database.yml 中的内容时一切正常,但当我只使用 database.yml 引用时却不行?

谢谢!

【问题讨论】:

    标签: ruby-on-rails database


    【解决方案1】:

    我尝试复制并让它发挥作用。它与命名约定有关: 您处于开发模式,AR 将寻找开发标签,在您的情况下,sqlite 不存在该标签。

    这是我的 database.yml:

    development:
      adapter: mysql2
      database: se_development
      username: root
      pool: 5
      timeout: 5000
    
    sqlite_development:
      adapter: sqlite3
      database: db/development.sqlite3
      pool: 5
      timeout: 5000
    

    这是模型:

    class Plot < ActiveRecord::Base
      establish_connection 'sqlite_' + Rails.env
    end
    

    为我工作。希望这会有所帮助。

    【讨论】:

    • 如果您有两个具有不同键/值的development:,这不起作用吗?
    猜你喜欢
    • 2011-12-02
    • 2010-11-07
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多