2013-04-15 84 views
2

我有一個使用兩種不同類型的數據庫的rails應用程序:sqlite3和mysql2。Rails中的Mysql2和Sqlite3

我做了一些搜索和管理,走這麼遠,我的database.yml文件看起來是這樣的:

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


mysql2_development: 
    adapter: mysql2 
    database: db_name 
    username: user_name 
    password: pass_word 
    host: somehost.net 
    port: 3306 
    socket: /tmp/mysql.sock 

我創建了模型中的下列類來訪問我的Mysql2數據庫:

class NewDB < ActiveRecord::Base 

    # To change this template use File | Settings | File Templates. 
    self.abstract_class = true 
    establish_connection "mysql2_#{Rails.env}" 
end 

class PROJECT < NewDB 
end 

這裏PROJECT是「NewDB」數據庫中的表格。

問題:

這是做正確的方式,還有如何從控制器訪問它們?

在我的控制器我嘗試這樣做:

class NewDBController < ApplicationController 

    def index 
    @projects=PROJECT.all 
    end 
end 

但我得到以下錯誤 「Mysql2 ::錯誤:表 'newdb.projects' 不存在:SHOW FULL FIELDS FROM projects

回答

2

您是否爲其他環境運行遷移?

rake db:migrate RAILS_ENV=mysql2_development 

此外,您的項目類應改爲Project。 您可以使用:

class Project < NewDB 
    set_table_name "PROJECT" 
end 
+0

我試圖運行的是,它給了我這個錯誤 '耙中止! Mysql2 ::錯誤:CREATE命令被拒絕給表'schema_migrations'的用戶'user_ro'@'10.0.0.123':CREATE TABLE'schema_migrations'('version' varchar(255)NOT NULL)ENGINE = InnoDB' – dora

+0

此外, mysql2 db中的表名是全部大寫的「PROJECT」。 – dora

+0

請參閱表名問題的編輯答案。如果該表已經存在,則不需要運行遷移。如果沒有,你必須登錄到你的MySQL並給user_ro寫權限。 –