2011-02-23 66 views
8

我正在研究多數據庫Rails 3應用程序。每個數據庫都有不同的模式(並且在生產中位於不同的位置)。我已經設置了應用去跟不同的數據庫,像這樣:使用不同模式的多個數據庫的Rake任務

的database.yml

development: 
    adapter: mysql2 
    encoding: utf8 
    reconnect: false 
    database: main_development 
    pool: 5 
    username: someuser 
    password: somepassword 
    socket: /tmp/mysql.sock 

other_development: 
    adapter: mysql2 
    encoding: utf8 
    reconnect: false 
    database: other_development 
    pool: 5 
    username: someuser 
    password: somepassword 
    socket: /tmp/mysql.sock 

型號/ other_base.rb

class OtherBase < ActiveRecord::Base 
    self.abstract_class = true 
    establish_connection "other_#{Rails.env}" 
end 

型號/ some_model.rb

class SomeModel < OtherBase 
    # Regular stuff here 
end 

現在,這適用於web應用程序,但不太適合運行rake任務,包括測試(未裝載夾具c orrectly)。有沒有可用於此的寶石?任何幫助讚賞。

此外,創建一個schema.rb文件可以處理不同數據庫的不同模式 - 也就是說,允許我執行rake db:create或db:setup之類的操作,並讓它創建多個具有數據庫特定模式的數據庫。

+0

請給出一些關於錯誤的更多細節。某些日誌輸出或確切的錯誤。同時粘貼你的rake任務代碼不工作。 – Zimbabao 2011-02-23 10:20:31

回答

0

你可以試試loopy multiple databases插件。它似乎允許容易地指定不同的耙架配置

+1

不幸的是,該插件似乎不再可用。安裝它的說明涉及不再響應的Subversion服務器。 – 2011-06-23 14:53:15

1

我有同樣的問題,花了半個小時尋找'loopy_multiple_database'插件後,最終得出結論,它已經消失在網絡的面部,並求助於monkey-patching the Rails rake tasks 。我想修復的唯一任務是db:migrate,但同樣的(醜陋的)過程也允許您修補其他任務。

On Rails的3,添加創建一個文件db_migrate_override.rake(任何* .rake名字都行)在lib/tasks像這樣:

Rake::TaskManager.class_eval do 
    def remove_task(task_name) 
    @tasks.delete(task_name.to_s) 
    end 
end 

def remove_task(task_name) 
    Rake.application.remove_task(task_name) 
end 

namespace :db do 
    remove_task 'db:migrate' 
    desc "Migrate the database (options: VERSION=x, SRCDIR=path, VERBOSE=false)." 
    task :migrate => :environment do 
    srcdir = (ENV["SRCDIR"] || "db/migrate/") 
    ActiveRecord::Migrator.migrate(srcdir, ENV["VERSION"] ? ENV["VERSION"].to_i : nil) 
    Rake::Task["db:schema:dump"].invoke if (ActiveRecord::Base.schema_format == :ruby && ENV['SRCDIR'].nil?) 
    end 
end 

然後你可以運行

rake db:migrate RAILS_ENV=other_development SRCDIR=db_other/migrate 
3

我發現使用在這種情況下環境是不可接受的黑客攻擊。你想在同一個環境中有兩個數據庫。

當我自己研究這個問題時,我遇到了github用戶rafaelchiti的要點。不幸的是,他刪除了原來的要點。你可以找到一個copy of it here

+0

如果可以的話,我會接受這個答案。我只需要對此加以改進。 – Ron 2014-08-02 00:36:53

+0

鏈接已損壞。 – seancdavis 2015-02-13 20:57:53

1

您可以嘗試使用章魚寶石(https://github.com/thiagopradi/octopus),它可以幫助您設置多個數據庫並與Rails 3.2和Rails 4兼容。 使用此gem,您可以輕鬆指定要運行遷移的數據庫。

相關問題