zac*_*618 5 database ruby-on-rails
我已经阅读了有关如何执行此操作的文档,但在实践中,我遇到了问题.在我的应用程序中,我有2个不同的数据库,如下面我的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
Run Code Online (Sandbox Code Playgroud)
我的应用程序是一个动态绘图仪,它将在(基本)数据库中绘制数据,而不了解数据库中的数据或结构如何.这两个数据库都包含不同的数据.我在一个单独的Rails应用程序中创建的SQLite数据库.
我正在使用的当前应用程序是围绕MYSQL数据库构建的,我在外部构建它.我将SQLite数据库复制到/ db目录中.所以在我的主模型中,当我说:
class Plot < ActiveRecord::Base
establish_connection :development
set_table_name "stock_test"
set_primary_key :id
Run Code Online (Sandbox Code Playgroud)
一切都很好,花花公子.但是,当我将其更改为:
establish_connection :sqlite_test
set_table_name "plots"
Run Code Online (Sandbox Code Playgroud)
并尝试通过Rails控制台访问该数据库,我收到一个错误说:
>>ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会这样,因为database.yml文件明确指定了一个适配器?当我在我的模型中手工完成时,一切都完全正常.
class Plot < ActiveRecord::Base
establish_connection(:adapter => "sqlite3", :database => "db/sqlite_test.sqlite3", :pool => 5 )
Run Code Online (Sandbox Code Playgroud)
当我在database.yml中手动指定whats时,为什么这一切都有效,但是当我只使用database.yml引用时却没有?
谢谢!
我尝试复制并让它发挥作用。它与命名约定有关:您处于开发模式,AR 将查找开发标签,在您的情况下,sqlite 不存在该标签。
这是我的数据库.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
Run Code Online (Sandbox Code Playgroud)
这是模型:
class Plot < ActiveRecord::Base
establish_connection 'sqlite_' + Rails.env
end
Run Code Online (Sandbox Code Playgroud)
为我工作。希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
4803 次 |
| 最近记录: |