2012-04-28 93 views
5

我已经阅读了关于如何做到这一点的文档,但在实践中,我遇到了问题。 在我的应用程序中,我有两个不同的数据库,如下所述在我的database.yml文件中。如何在Rails应用程序中使用多个数据库使用database.yml

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引用?

谢谢!

回答

4

我试图复制,并得到它的工作。它与命名约定有关: 您处于开发模式,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 

为我工作。希望这可以帮助。

+0

如果你有两个'开发:'不同的键/值? – vol7ron 2013-04-23 18:42:09

相关问题