12
votes

Pourquoi Activeiverecord :: base.connected? est faux, après avoir appelé établissage_connection

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

La connexion à la base de données est établie dans test_helper.rb avec le code suivant: < Pré> xxx

et activeCord :: base.connected? obtenir false. Si j'appelle user.find (: tout) Par exemple, après que le test d'établissement de la connexion passe et activerecord :: base.connecté? sera vrai. Pourquoi? Je ne comprends pas.


2 commentaires

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.


3 Réponses :


0
votes

Assurez-vous et exécutez Rake DB: Créez pour votre environnement de test. Il semble que la DB n'existe pas et dans la SQLite qui devrait dépendre du répertoire.


0 commentaires

1
votes

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


0 commentaires

8
votes

activeCord :: base.establish_connection 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: xxx

le sauvetage Faux cache quelques exceptions potentielles (par exemple, PG :: Connectionbad ). Reportez-vous au Documentation de: with_connection pour plus d'informations.


0 commentaires