我已经阅读了关于如何做到这一点的文档,但在实践中,我遇到了一些问题。在我的应用程序中,我有两个不同的数据库,如下我的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数据库构建的,而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引用时却不起作用?
谢谢!
发布于 2012-05-08 01:45:34
我试着复制,并让它工作。这与命名约定有关:您处于开发模式,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
对我很管用。希望这能有所帮助。
https://stackoverflow.com/questions/10360705
复制