Wie laden Sie mehrere Schemas in eine Rails-Engine oder App?

9

Ich suche, alle meine geteilten Modelle zu einer Engine zu bewegen, die in jeder meiner Mikro-Apps enthalten sein kann.

Diese Engine sollte eine Modellschicht für alle unsere Altdaten bereitstellen, einschließlich:

Modelldateien werden automatisch gepatcht, das ist in Ordnung.

Schemadateien werden mit Hilfe von von Nikolay Strum geplappt db.rake :

%Vor%

Wir brauchen rake db:create und rake db:schema:load um zu arbeiten,

Die db.rake Patches betreffen nur db:schema:dump und db:test:load_schema (Teil von tests_prepare, nehme ich an). Ich habe versucht, sie in db:schema:load zu packen mit:

%Vor%

Aber das gibt mir den Fehler NoMethodError: undefined method 'recreate_database' for #<ActiveRecord::ConnectionAdapters::SQLite3Adapter:0x007feb6bb43558> . Scheinbar funktioniert das nur auf Oracle-Typ-Datenbanken?

Was sind die Rails-Befehle für die zugrunde liegende DROP und CREATE DATABASE sql Ich versuche, für die zusätzlichen schema.rb s zu beeinflussen?

    
Jordan Feldstein 22.12.2015, 03:34
quelle

1 Antwort

0

Sie verwenden SQLite als Datenbankmodul. Hoffe, dass du das willst.

Da Sie SQLite-Datenbank erstellen, unterscheiden sich die Dinge ein wenig von anderen Datenbankadaptern wie MySQLAdpter oder Postgress.

Im Falle von MySQL muss die Datenbank vor dem Aufbau einer Verbindung erstellt werden, indem "CREATE DATABASE ..." SQL-Befehle ausgegeben werden. Sie müssen daher die Datenbank vor dem Verbindungsaufbau erstellen.

Aber im Falle von SQLite, da die Datenbank in einer Datei gespeichert ist und eine Datei nur eine Datenbank enthalten kann, gibt es keinen separaten Schritt zum Erstellen der Datenbank. Wenn versucht wird, eine Verbindung zur Datenbank herzustellen, wird die Datenbankdatei erstellt.

Die create_database-Methode funktioniert daher nicht, wenn SQLiteAdapter verwendet wird. Sie können diese Zeile einfach aus Ihrem Code entfernen.

Sie können sich den Quellcode für die Rake-Task db ansehen: create

Ссылка

Auch der Quellcode für die 'create' Methode in SQLiteDatabaseTasks. Wie Sie sehen können, ruft es einfach die Methode "set_connection"

auf

Ссылка

    
Vishnuprasad R 10.10.2017 17:38
quelle