2010-01-28 3 views
1

J'ai deux bases de données en cours d'utilisation dans une application Ruby on Rails; l'un est la base de données de l'application tandis que l'autre est une base de données indépendante sur laquelle Rails n'a pas de contrôle. Le problème est lors du chargement des appareils dans le dev, il essaie d'exécuter les instructions DELETE sur les tables de la base de données indépendante à partir de la connexion à la base de données dev, ce qui entraîne évidemment des erreurs.Ruby on Rails et db: fixtures: load - peut-il ignorer certains modèles?

Je ne veux pas que Rails essaie de faire quoi que ce soit, mais lisez la base de données indépendante - Je ne veux surtout pas qu'il essaie de supprimer des tables.

Existe-t-il un moyen simple de dire à Rails d'ignorer les modèles de la seconde base de données lors du chargement des appareils? MISE À JOUR: Pour clarifier, Rails semble penser que les tables de la base de données indépendante font partie de la connexion de développement, bien que j'ai spécifié la connexion correcte dans la classe du modèle en utilisant establish_connection. Comme une autre note, toutes les classes de modèle fonctionnent précisément comme souhaité de script/console.

Répondre

0

D'accord ... mon problème est que je le script/generate pour créer les modèles de la base de données secondaire, qui a également créé montage, schéma , test et migrations. J'avais supprimé les fichiers de schéma, de test et de migration, mais je n'ai pas supprimé les fichiers générés (ils étaient des fichiers vides) car je ne pensais pas en avoir créé.

Après avoir retiré tous les fichiers (y compris les modèles) de la base de données secondaire et de refaire les migrations pour le dev db, je réintégrées seulement les fichiers de modèle et la base de données databases.yml du db secondaire, résolu le problème. Je ne peux toujours pas expliquer pourquoi les tâches de Rails étaient dans la mauvaise base de données et je suis un peu déçu de l'ajout de la table schema_migrations dans la base de données secondaire, ce dont elle n'a évidemment pas besoin.

Cependant, cela fonctionne maintenant.

2
rake db:fixtures:load RAILS_ENV=testing 

fera le travail pour la base de données configurée comme testing dans votre database.yml

+0

Je l'ai essayé avec l'environnement ensemble de variables utilisant l'exportation avant l'affichage; Selon votre suggestion, j'ai aussi essayé de cette façon. Même erreur –

+0

Vous pouvez écrire votre propre appareil pour charger les données de * .yml dans la base de données souhaitée, c'est tout ce que je peux suggérer avec les informations que vous fournissez. GL –

+0

'rake db: fixtures: load RAILS_ENV = test' (pas de test) a fonctionné pour moi. –

1

Supprimez le fichier model_name.yml dans votre répertoire test/fixtures et Rails n'essaiera pas de supprimer ces tables.

Mieux encore, supprimez tous vos fichiers *.yml et stopusingfixtures entièrement.

+1

C'est ce que j'ai finalement découvert de ma réponse ci-dessous; cependant, il n'aurait pas dû essayer de les supprimer de la mauvaise table.Je suis un mec PHP/Python et je suis habitué à modéliser les tests étant beaucoup moins pointilleux. Les migrations sont agréables, mais le reste n'est qu'un mal de tête. Je vais vérifier les liens que vous avez fournis. Merci. –

1

Je pense que vous pourriez aussi être en mesure d'y arriver en ajoutant toutes les tables de la base de données indépendante à ActiveRecord :: SchemaDumper.ignore_tables à environment.rb, comme ceci:

ActiveRecord::SchemaDumper.ignore_tables = ['independent_db_table1', 'independent_db_table2']