Je développe une application SINATRA et utilisez-le ActiveRecord pour travailler avec la base de données, mais j'ai rencontré un problème. J'ai écrit un test pour un modèle et il se casse avec
SQLite3 :: CantopenException: impossible d'ouvrir le fichier de base de données blockQuote>La connexion à la base de données est établie dans test_helper.rb avec le code suivant: p> < Pré> xxx pré>
et
activeCord :: base.connected? code> obtenir false. Si j'appelle
user.find (: tout) code> Par exemple, après que le test d'établissement de la connexion passe et
activerecord :: base.connecté? Code> sera vrai. Pourquoi? Je ne comprends pas. P> p>
3 Réponses :
Assurez-vous et exécutez Rake DB: Créez CODE> pour votre environnement de test. Il semble que la DB n'existe pas et dans la SQLite qui devrait dépendre du répertoire. P>
activeRecord :: base.establish_connection est délégué à ActiveRecord :: ConnectionDadapters :: ConnectionHandler # Stablish_Connection et si vous regardez son Mise en œuvre Vous verrez qu'il crée simplement une connexion Tirez p>
le sauvetage code> Faux code> cache quelques exceptions potentielles (par exemple, activeCord :: base.establish_connection code> ne permet que la connexion et Activerecord ne se connecte pas réellement qu'une connexion à la base de données soit demandée.
Le code suivant peut vous aider à obliger Activerecord à établir une connexion pour la connexion-piscine:
PG :: Connectionbad code>).
Reportez-vous au Documentation de: with_connection pour plus d'informations. P > p>
Comme je comprends bien établir_connection ne fait pas de réelle connexion. La question est donc, lorsque la connexion à la base de données est vraiment établie?
La connexion est vraiment établie après le premier appel de la méthode du modèle. Mon problème était dans la voie de la base de données. Dans le chemin de fichier de configuration est relatif, le test a été exécuté à partir du répertoire, où le fichier de base de données est intégré par chemin relatif. Changer le chemin d'absolu dans Test_Helper.rb a résolu le problème.