Ich habe die hstore-Erweiterung erfolgreich installiert, und alles funktioniert, wenn ich syncdb
. (Ich verwende djorm-ext-hstore )
nose erstellt jedoch eine neue temporäre Datenbank, in der Tests ausgeführt werden, und hstore ist nicht darin installiert.
Ich muss CREATE EXTENSION HSTORE;
auf der Test-DB ausführen, kurz bevor nose die db synchronisiert, aber ich kann keine Informationen darüber finden, wie das geht.
Irgendwelche Ideen?
Dies ist kein Problem: Der beste Weg, dies zu beheben, ist, die Erweiterung hstore in der Standarddatenbank template1
psql -d template1 -c 'create extension hstore;'
Referenz: Erstellen eine neue Datenbank mit der Hstore-Erweiterung bereits installiert?
Ich gehe davon aus, dass Sie Django-Nase verwenden. In diesem Fall sollten Sie Ihre eigene TestSuiteRunner
erstellen:
Dann sollten Sie in settings.py
Ihren eigenen Test-Runner angeben:
Seit meiner letzten Antwort verwarf Django und entfernte pre_syncdb
signal. Ich habe die Antwort aktualisiert, um neuere Versionen zu berücksichtigen. Die grundlegenden Mechanismen sind für neuere Versionen identisch, da beide Methoden auf Signale und den SQL-Code angewiesen sind, der nur ausgeführt wird, wenn die HSTORE-Erweiterung nicht existiert.
Seit Django DB-Migrationen eingeführt hat, waren pre_syncdb
signals < em> markiert veraltet in 1.7 und vollständig entfernt in 1.9 Sie führten jedoch ein neues Signal namens pre_migrate
ein, das gleich verwendet werden kann Weg.
Mein Vorschlag ist, pre_syncdb
signal hook zu verwenden.
Siehe meine Antwort auf der anderen Frage .
%Vor% Das Signal pre_syncdb
wird ausgelöst, bevor die Modelltabelle erstellt wird. Dies ist ideal, um sicherzustellen, dass die Erweiterung installiert wird, wenn die Testdatenbank jedes Mal eingerichtet wird. Das IF NOT EXISTS
stellt sicher, dass PostgreSQL den Befehl ignoriert, wenn die Erweiterung bereits installiert ist. Sie erhalten einen Fehler, wenn Sie CREATE EXTENSION
für eine Erweiterung ausführen, die bereits existiert.
Dies funktioniert für das Standard-Django-Unit-Test-Framework und wird höchstwahrscheinlich für Django-Nasentests funktionieren.
Weitere Informationen zu Signalen: Ссылка
Tags und Links python django nose postgresql hstore