Ich habe eine Webanwendung in Rails 4.2.6, die ursprünglich MongoDB (über Mongoid 5) als Hauptdatenbank verwendet. Jetzt muss ich jedoch eine Verbindung zu einer MySQL-Datenbank herstellen, um nur einige zusätzliche Daten für meine App zu lesen.Meine Rails 4.2.6 App verwendet zwei Datenbanken. Kann ich nur einen für Testzwecke verwenden?
Bis jetzt habe ich ActiveRecord in meinem Projekt benötigt und konnte die Verbindung mit der oben genannten Datenbank in der Entwicklungsumgebung herstellen. Meine Konfigurationsdateien für diese Angelegenheit sind:
mongoid.yml
development:
clients:
default:
database: mongo_development
hosts:
- localhost:27017
options:
test:
clients:
default:
database: mongo_test
hosts:
- localhost:27017
options:
read:
mode: :primary
max_pool_size: 1
options:
raise_not_found_error: false
database.yml
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: mysql_development
pool: 5
username: user
password: pass
socket: /var/run/mysqld/mysqld.sock
Das Problem kommt, wenn ich meine Test-Suite laufen. Ich verwende RSpec und bundle exec rspec spec
Ausführung ergibt die folgende Fehlermeldung:
/home/user/.rvm/gems/[email protected]/gems/activerecord-4.2.6/lib/active_record/connection_adapters/connection_specification.rb:248:in `resolve_symbol_connection': 'test' database is not configured. Available: ["development"] (ActiveRecord::AdapterNotSpecified)
Active beschwert sich für eine Testdatenbank mit zu verbinden, aber das Problem ist, dass ich nicht über eine MySQL-Datenbank zu Testzwecken haben: die Spezifikationen Ich schrieb nur mit Mongoid-Modellen interagieren.
Ich überlegte, eine leere MySQL-Datenbank als Hack zu erstellen, aber ich möchte zuerst wissen, wenn ich ActiveRecord konfigurieren konnte, keine Verbindung zu einer Testdatenbank herzustellen und nur mongo_test
zu verwenden.
Ist es möglich zu tun, was ich will? Weiß jemand, wie man das macht?
Vielen Dank für Ihren Vorschlag. Ich versuche, die zweite beschriebene Problemumgehung anzuwenden, aber ich habe einige Probleme mit dem automatischen Laden von 'activerecord' Modellen. Es scheint, als ob die 'config.autoload_paths' -Variable nicht in den umgebungsspezifischen Dateien geändert werden kann, wie in http://guides.rubyonrails.org/autoloading_and_loading_constants.html#autoload-paths erwähnt. –
Überprüfen Sie diese Antwort zu' config.ager_load_paths' und wie es sich zwischen Entwicklung und Produktion unterscheidet http://stackoverflow.com/questions/19773266/confusing-about-autoload-paths-vs-eager-load-paths-in-rails-4, ich denke, es wird nützlich sein. –
Nochmals vielen Dank für Ihre Hilfe, Mohamed! Ich war in der Lage, das Laden meiner 'activerecord' Modelle und das Erfordernis von 'activerecord's Railtie in _config/application.rb_ unter Bedingungen wie' require 'active_record/railtie' zu isolieren, außer Rails.env.test?' Und 'config .autoload_paths + = Verzeichnis [Rails.root.join ('lib', 'antifraud', '** /')] außer Rails.env.test? '. Derzeit, wenn ich meine Spezifikationen ausführen, schlagen sie alle den gleichen Fehler zurück: 'ActiveRecord :: ConnectionNotEstablished: Kein Verbindungspool für ActiveRecord :: Base' Ist dieser Fehler für Sie sinnvoll? Würdest du wissen, wie man es löst? –