2011-10-05 2 views
2

L'application My Rails 3 utilise Datamapper (dm-rails) comme ORM principal, mais elle doit également charger ActiveRecord comme l'exige une gemme personnalisée que j'utilise.Datamapper et ActiveRecord: tâches de rake de migration

Mon problème est que l'application a maintenant deux db:migrate tâches de râteau, et si je lance rake db:migrate j'obtiens l'erreur suivante:

rake aborted! 
VERSION is required 

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

Comment puis-je faire que les tâches de râteau ActiveRecord sont cachés afin que je puisse exécuter la tâche de migration Datamapper? L'utilisation d'automigrate n'est pas une option. En outre, je veux utiliser la tâche rake réelle db:migrate, pas une autre tâche de rake, et pas une solution de contournement de la console. Ma solution actuelle consiste simplement à copier les tâches rake Datamapper sous l'espace de noms db et à les redéfinir dans un fichier de tâches personnalisées sous un espace de noms différent. Cela marche. Cela semble redondant et je préférerais une solution plus propre.

+0

Comment avez-vous fait cela ?? Où sont les tâches de Rake Datamapper? J'ai le même problème. – mltsy

Répondre

0

AHA! Je ne sais pas si cela est le même problème que vous rencontrez, mais je trouve que dans ma demande, la question était config/application.rb:

La ligne: require 'rails/all' doit être remplacé pour des projets DataMapper avec:

# 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' 

La tâche rake Datamapper pour db: migrate est actuellement incluse dans dm-rails/railtie (pas dans dm-migrations). Je crois que le problème (la tâche AR rake db) est dans active_resource/railtie, ce que vous ne voulez pas si vous utilisez DataMapper.

Je ne sais pas comment rake décide quelles tâches utiliser, mais je suppose qu'il essaie d'exécuter les deux tâches avec le même nom si les deux sont définis.

Dans votre cas, cependant, vous pourriez effectivement besoinactive_resource/railtie, dans ce cas, la seule solution que je peux penser à côté d'utiliser un autre espace de noms comme votre solution de contournement, serait de remplacer le db: migrate tâche de râteau en utilisant quelque chose comme ceci dans un fichier de tâche personnalisé:

namespace :db do 
    Rake::Task["db:migrate"].clear 
    task :migrate do 
    ... 
    end 
end