2012-04-28 50 views
5

Tôi đã đọc trên tài liệu hướng dẫn về cách thực hiện điều này, nhưng trên thực tế, tôi đang gặp sự cố. Trong ứng dụng của tôi, tôi có 2 cơ sở dữ liệu khác nhau như được mô tả bên dưới trong tệp database.yml của tôi.Cách sử dụng nhiều cơ sở dữ liệu trong ứng dụng Rails Sử dụng cơ sở dữ liệu

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 

Ứng dụng của tôi là một bản vẽ động sẽ vẽ dữ liệu trong cơ sở dữ liệu (cơ bản) mà không biết kiến ​​thức cơ sở dữ liệu. Cả hai cơ sở dữ liệu này chứa dữ liệu khác nhau. Cơ sở dữ liệu SQLite mà tôi đã tạo trong một ứng dụng Rails riêng biệt.

Ứng dụng hiện tại tôi đang sử dụng được xây dựng xung quanh cơ sở dữ liệu MYSQL, mà tôi xây dựng bên ngoài. Tôi đã sao chép cơ sở dữ liệu SQLite vào thư mục/db. Vì vậy, trong mô hình chính của tôi, khi tôi nói:

class Plot < ActiveRecord::Base 

    establish_connection :development 
    set_table_name "stock_test" 
    set_primary_key :id 

Mọi thứ hoạt động tốt và dandy. Tuy nhiên, khi tôi thay đổi nó để:

establish_connection :sqlite_test 
set_table_name "plots" 

và cố gắng truy cập vào cơ sở dữ liệu thông qua giao diện điều khiển Rails, tôi nhận được một lỗi nói:

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

Tôi không biết lý do tại sao có nghĩa là, kể từ khi tệp database.yml rõ ràng không chỉ định bộ điều hợp? Khi tôi làm điều đó bằng tay trong mô hình của tôi mặc dù, tất cả mọi thứ hoạt động chính xác như nó cần.

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

Tại sao tất cả hoạt động khi tôi chỉ định thủ công những gì trong database.yml, nhưng không phải khi tôi chỉ sử dụng tham chiếu database.yml?

Cảm ơn!

Trả lời

4

Tôi đã cố gắng sao chép và làm cho nó hoạt động. Nó phải làm với quy ước đặt tên: Bạn đang ở chế độ phát triển và AR sẽ tìm kiếm thẻ phát triển, trong trường hợp của bạn không tồn tại đối với sqlite.

Đây là database.yml của tôi:

development: 
    adapter: mysql2 
    database: se_development 
    username: root 
    pool: 5 
    timeout: 5000 

sqlite_development: 
    adapter: sqlite3 
    database: db/development.sqlite3 
    pool: 5 
    timeout: 5000 

Dưới đây là mô hình:

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

Làm việc cho tôi. Hi vọng điêu nay co ich.

+0

điều này không hoạt động nếu bạn có hai 'phát triển:' với khóa/valuee khác nhau? – vol7ron

Các vấn đề liên quan