So verwenden Sie mehrere Datenbanken in einer Rails-App: Verwenden Sie die Datei database.yml

Ich habe in der Dokumentation nachgelesen, wie das geht, aber in der Praxis habe ich Probleme. In meiner App habe ich 2 verschiedene Datenbanken, wie unten in meiner database.yml-Datei beschrieben.

<code>sqlite_test:
    adapter: sqlite3
    database: db/sqlite_test.sqlite3
    table: plots
    pool: 5
    timeout: 5000

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: test
  pool: 5
  username: myname
  password: mypassword
  host: localhost
</code>

Meine Anwendung ist ein dynamischer Plotter, der die Daten in einer (Basis-) Datenbank plottet, ohne zu wissen, was in der Datenbank enthalten ist oder wie diese strukturiert ist. Diese beiden Datenbanken enthalten unterschiedliche Daten. Die SQLite-Datenbank habe ich in einer separaten Rails-App erstellt.

Die aktuelle App, die ich verwende, basiert auf der MYSQL-Datenbank, die ich extern erstellt habe. Ich habe die SQLite-Datenbank in das Verzeichnis / db kopiert. Also in meinem Hauptmodell, wenn ich sage:

<code>  class Plot < ActiveRecord::Base

  establish_connection :development
  set_table_name "stock_test"
  set_primary_key :id
</code>

Alles klappt prima und gut. Wenn ich es jedoch ändere in:

<code> establish_connection :sqlite_test
 set_table_name "plots"
</code>

Wenn ich versuche, über die Rails-Konsole auf diese Datenbank zuzugreifen, erhalte ich die Fehlermeldung:

<code>>>ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter
</code>

Ich weiß nicht, warum das so ist, da die Datei database.yml eindeutig einen Adapter angibt. Wenn ich es in meinem Modell von Hand mache, funktioniert alles genau so, wie es sollte.

<code>class Plot < ActiveRecord::Base
establish_connection(:adapter => "sqlite3", :database => "db/sqlite_test.sqlite3", :pool => 5 )
</code>

Warum funktioniert das alles, wenn ich manuell spezifiziere, was in der database.yml ist, aber nicht, wenn ich nur die database.yml-Referenz verwende?

Vielen Dank!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage