2011-10-05 86 views
2

My Rails 3應用程序使用Datamapper(dm-rails)作爲其主ORM,但它也需要加載ActiveRecord,因爲它是我使用的自定義gem所需的。Datamapper和ActiveRecord:遷移rake任務

我的問題是,現在的應用程序有兩個db:migrate耙的任務,如果我跑rake db:migrate我得到以下錯誤:

rake aborted! 
VERSION is required 

Tasks: TOP => db:migrate => db:migrate:up 
(See full trace by running task with --trace) 

如何確保ActiveRecord的rake任務是隱藏的,這樣我可以執行Datamapper遷移任務?使用automigrate不是一種選擇。另外,我想使用實際的db:migrate rake任務,而不是另一個rake任務,而不是某種控制檯解決方法。

編輯:我目前的解決方法是簡單地複製db命名空間下的Datamapper rake任務,並將它們重新定義在不同命名空間下的自定義任務文件中。這工作。這似乎是多餘的,我寧願更清潔的解決方案。

+0

你是怎麼做到的? Datamapper Rake任務在哪裏?我有同樣的問題。 – mltsy

回答

0

AHA!我不知道這是不是你有同樣的問題,但我發現,在我的應用程序,這個問題是config/application.rb

行:require 'rails/all'應更換爲DataMapper的項目:

# Pick the frameworks you want: 
require 'action_controller/railtie' 
require 'dm-rails/railtie' 
# require 'action_mailer/railtie' 
# require 'active_resource/railtie' 
# require 'rails/test_unit/railtie' 

db:migrate的Datamapper rake任務實際上包含在dm-rails/railtie(不在dm-migrations中)。我相信這個問題(AR rake數據庫任務)在active_resource/railtie中,如果您使用的是DataMapper,則不需要這些。

我不知道rake如何決定使用哪個任務,但是我收集它會試圖在兩個任務都定義的情況下運行兩個具有相同名稱的任務。

在你的情況,但是,你實際上可能需要active_resource/railtie,在這種情況下,我可以使用另一種命名喜歡你的解決方法想拋開唯一的解決辦法,將覆蓋DB:使用類似的遷移rake任務這在一個自定義任務文件中:

namespace :db do 
    Rake::Task["db:migrate"].clear 
    task :migrate do 
    ... 
    end 
end 
相關問題