2012-03-11 94 views
1

是否可以在rails應用程序中追加兩個數據庫?例如,SQLite數據庫是可移植的。我可以從另一臺服務器上下載SQLite數據庫。當rails應用程序啓動時,它會掛載數據庫。我可以將所有數據從另一個數據庫追加到現有數據庫嗎?可能是SQLite提供了一種合併數據庫的方法?Rails追加數據庫

+0

你不應該在生產中使用SQLite,因爲它不是爲這種負載設計的。 – 2012-03-11 19:34:33

回答

2

我不確定你說的「在應用程序中附加數據庫」是什麼意思。但是,您可以在應用程序中使用2個不同的(使用不同的方案)數據庫。例如:

的config/database.yml的

development: 
    adapter: mysql2 
    encoding: utf8 
    reconnect: false 
    database: project_dev 
    pool: 5 
    username: project 
    password: 

test: 
    adapter: mysql2 
    encoding: utf8 
    reconnect: false 
    database: project_test 
    pool: 5 
    username: project 
    password: 

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

    test: 
    adapter: sqlite3 
    database: db/test.project.db 
    pool: 5 
    timeout: 5000 

型號:

所有源碼模型抽象模型; 使用connection ninja寶石

class SqliteModel < ActiveRecord::Base 
    self.abstract_class = true 
    use_connection_ninja(:sqlite) 
end 

sqlite的模型

class Book < SqliteModel 
    set_table_name :Books 
    set_primary_key :BookID 

    belongs_to :volume, :foreign_key => :VolumeID 
    has_many :chapters, :foreign_key => :BookID 
end 

Mysql的模型

class Highlight < ActiveRecord::Base 
    # ... 
end 

你甚至可以用在不同的數據庫表之間的關聯。但如果你問的是使用2個數據庫的方法(即只是不同的數據),那麼我的答案是否定的,這是不可能的(儘管我可能是錯的)。我認爲這是一個關於複製,同步,備份或類似的問題 - 數據庫層,而不是應用程序。

當然,您可以在兩個數據庫中都有兩個相同的表,兩個模型 - 每個數據庫一個,然後只是將記錄從一個複製到另一個。但Rails不會自動完成。

1

如果想要的「種子」您的數據的數據庫從外部源,就像一箇中央位置,最好的辦法是:

  • 提供這樣的數據轉換成一個簡單的迭代格式(如CSV, JSON或YAML);
  • 將這些數據合併到您的應用程序的初始化數據庫中,假設它不存在。

我在某些項目上做了這樣的事情。我不會,但是,自動執行合併:我寧願使用db/seeds.rb文件和rake db:seed任務:

if State.count == 0 
    State.transaction do 
    CSV.foreach("#{::Rails.root}/db/seed_data/states.csv", 'r') do |row| 
     code, acronym, name = *row 
     State.create! code: code, acronym: acronym, nane: name 
    end 
    end 
end 

在這段代碼中,我從一個本地文件裝載數據,但你可以很容易改變遠程文件使用Net::HTTP