2008-11-06 6 views

Antwort

17

Sie können ein Schienen-Konfigurationsobjekt erstellen und die notwendigen Informationen von ihm erhalten:

config = Rails::Configuration.new 
host  = config.database_configuration[RAILS_ENV]["host"] 
database = config.database_configuration[RAILS_ENV]["database"] 

die documentation für Rails Siehe :: Configuration für Details.

+0

Dokumentation Link gebrochen ist. Soll es auf http://guides.rubyonrails.org/configuring.html zeigen? – evanrmurphy

+3

Diese Lösung funktioniert nicht in Rails 3. –

22

Die Rails :: configuration.new Antwort funktioniert nicht in Rails 3

config = Rails::Configuration.new 
NoMethodError: undefined method `new' for Rails::Configuration:Module 
[...] 

Wenn Sie mit MySQL oder Postgres dann funktioniert das

ActiveRecord::Base.connection.current_database 

Das funktioniert aber nur mit Treibern, die haben implementiert diese Methode. Zum Beispiel wird es nicht für SQLite funktionieren.

+1

ActiveRecord :: Base.connection.current_database funktioniert auch für Postgres, der Treiber ist abstrahiert, so dass es für alle Datenbanken funktioniert – house9

+1

@ house9 Ich habe die Antwort bearbeitet, um dies zu reflektieren, danke! –

17

On Rails 3 ist dies am einfachsten über Rails::Application.config zugegriffen, etwa so:

YourApplicationClassName::Application.config.database_configuration[::Rails.env] 

Wenn Sie versuchen, es auf Rails direkt anrufen statt YourApplicationClassName, Schienen geben Ihnen einen deperecation Warnung. Wenn Sie nicht wissen, was Ihre Anwendungskonstante ist, versuchen Sie Rails.application.class.name in einer Rails-Konsole für Ihre App.

+0

Diese Lösung funktioniert nicht in Rails 3. –

+1

Dies funktioniert in 3.2 (3.2.14) – yorch

+0

Funktioniert auch in Rails 4. Nicht sicher, worauf Pavel sich bezieht. –

6

Die folgende Methode ist nett, wenn Sie mit mehreren Datenbanken verbunden sind. Getestet auf Sqlite3 und mysql2

MyModel.connection.instance_variable_get(:@config)[:database] 
+0

Funktioniert wie ein Charme! – jackyalcine

+0

Bei Verwendung mehrerer Datenbanken ist dies die Antwort, die Sie benötigen –

38

Mit Rails 3 können Sie

Rails.configuration.database_configuration[Rails.env] 

oder

Rails.application.config.database_configuration[Rails.env] 

oder

ActiveRecord::Base.connection_config 
+3

Sie haben es für 'ActiveRecord :: Base.connection_config' Ich denke, das ist die sauberste Art und Weise, dies zu tun. – 244an

+0

'ActiveRecord :: Base.configurations' hat zum Finden aller Konfigurationen statt 'ActiveRecord :: Base.connection_config' für die aktuelle Konfiguration gearbeitet. – sbonami

+0

nette, mag ich '' 'ActiveRecord :: Base.connection_config''' –

5

in Rails-Konsole getestet verwenden:

ActiveRecord::Base.connection.instance_variable_get(:@config) 

nächste Info sollte aus sein: Adapter, Host-Codierung, schließen, Datenbankname, Benutzername, geben

Verwandte Themen