2016-06-23 12 views
0

Ich habe dieses Projekt und ich muss eine Reihe von Datenbanken in mein Rails-Projekt integrieren.Rake db: Schema: Dump erzeugt kein Schema für alle Datenbanken

Dies ist die Datenbankkonfiguration, mit der ich arbeiten muss.

$ nano config/database.yml

production: 
    adapter: mysql2 
    reconnect: true 
    pool: 5 
    username: user_xyz 
    password: 123456 
    database: database1 
    host: localhost 


    database_2: 
    adapter: mysql2 
    reconnect: false 
    pool: 5 
    username: user_xyz 
    password: 123456 
    database: database2 
    host: 192.168.2.100 

    database_3: 
    adapter: mysql2 
    reconnect: false 
    pool: 5 
    username: user_xyz 
    password: 123456 
    database: database3 
    host: 192.168.2.101 

    database_4: 
    adapter: mysql2 
    reconnect: false 
    database: database4 
    pool: 5 
    username: user_xyz 
    password: 123456 
    host: 192.168.2.102 

Ich brauche das Schema innerhalb db/schema.rb zu aktualisieren, aber leider ist es nur das Schema für die Produktion (database1) zu erzeugen.

$ RAILS_ENV=production bundle exec rake db:schema:dump 

Ich kann nicht nur diese laufen, wie es klagt:

$ bundle exec rake db:schema:dump 
rake aborted! 
database configuration does not specify adapter 

Was muss ich tun, alle diese Datenbanken in db/schema.rb zu bekommen?

Antwort

1

Austios Antwort ist eine gute. Hier finden Sie einige zusätzliche Details zur Implementierung einer Lösung. Erstellen Sie eine neue Rechen-Datei, zum Beispiel lib/tasks/schema_dump.rake, und fügen Sie den folgenden Inhalt:

namespace :schema do 
    desc 'dumps the schema of database_1 to db/schema_db1.rb' 
    task :dump_db1 => :environment do 
    ActiveRecord::Base.establish_connection 'database_4' 
    File.open(Rails.root.join('db', 'schema_db1.rb'), 'w') do |file| 
     ActiveRecord::SchemaDumper.dump ActiveRecord::Base.connection, file 
    end 
    end 
end 

Wenn Sie jetzt rake db:schema:dump laufen, es wird das Schema Ihrer primären Datenbank zu db/schema.rb (wie traditionellen Rails) abladen. Aber wenn Sie rake db:schema:dump_db1 ausführen, wird das Schema Ihres database_1-Blocks in db/schema_db1.rb gespeichert.

Sie können ähnliche Aufgaben für Ihre anderen Datenbankblöcke erstellen und eine Schemadatei für jede Datenbank erstellen.

1

Sie müssen eine Verbindung zu jeder Datenbank herstellen, für die Sie ein Schema-Dump erstellen möchten. Hier ist ein Beispiel für database_4

Wenn Sie dann Schema-Dump ausführen, wird die aktuelle Datenbank, mit der Sie eine Verbindung haben, gespeichert. Ich bin mir nicht sicher, ob der Rake-Task Argumente enthält, um ihn in einen anderen Dateinamen zu kopieren, daher müssen Sie die Datei möglicherweise umbenennen.

Verwandte Themen