Frage

Ich schreibe eine Harke Aufgabe, die außerhalb von Rails / Active einige DB funktioniert.

Gibt es eine Möglichkeit, die DB-Verbindung info (Host, Benutzername, Passwort, DB-Namen) für die aktuelle Umgebung zu erhalten, wie in database.yml definiert?

Ich mag es bekommen, so kann ich es so zu verbinden, verwendet ...

con = Mysql.real_connect("host", "user", "pw", "current_db")
War es hilfreich?

Lösung

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

config   = Rails.configuration.database_configuration
host     = config[Rails.env]["host"]
database = config[Rails.env]["database"]
username = config[Rails.env]["username"]
password = config[Rails.env]["password"]

Sehen Sie die Dokumentation für Rails :: Configuration für Details.

Dies ist nur verwendet YAML :: load die Konfiguration laden von die Datenbank-Konfigurationsdatei (database.yml), die Sie selbst verwenden können, die Informationen von außerhalb der Schienen-Umgebung zu bekommen:

require 'YAML'
info = YAML::load(IO.read("database.yml"))
print info["production"]["host"]
print info["production"]["database"]
...

Andere Tipps

Bryans Antwort im Kommentar oben verdient ein wenig mehr Aufmerksamkeit:

>> Rails.configuration.database_configuration[Rails.env]
=> {"encoding"=>"unicode", "username"=>"postgres", "adapter"=>"postgresql", "port"=>5432, "host"=>"localhost", "password"=>"postgres", "database"=>"mydb", "pool"=>5}
ActiveRecord::Base.connection_config

gibt die Verbindungskonfiguration in einem Hash:

=> {:adapter=>ADAPTER_NAME, :host=>HOST, :port=>PORT, 
    :database=>DB, :pool=>POOL, :username=>USERNAME, 
    :password=>PASSWORD} 

Wie tpett in ihrem Kommentar bemerkte. Diese Lösung macht die Konfiguration von database.yml Zusammenführung und aus der Umgebungsvariablen DATABASE_URL

Ich denke, dies ist die einfachste Lösung ist. Nach einigen Tests (in Rails 5.2 zumindest), wird dies beheben DATABASE_URL richtig.

 ActiveRecord::Base.configurations[Rails.env]

Alte Frage, aber das war eine meiner ersten Stationen in der oben schaut, wie dies so zu tun, Figur, die ich dies jemand anderes helfen kann. Ich habe normalerweise .my.cnf Dateien im Home-Verzeichnis. Also mit dem ‚parseconfig‘ Juwel und einig ERB Syntax in meiner database.yml Konfigurationsdatei bedeutet, dass ich dynamische Datei habe, dass ich gut über das Einchecken in der Quellcodeverwaltung fühlen und auch Implementierungen vereinfachen (in meinem Fall). Beachten Sie auch die Liste des gemeinsamen Sockels, das macht es einfacher, meine App zu verschiedenen Betriebssystemen zu bewegen, die einen anderen Unix-Socket-Pfad haben könnten.

<% 
    require 'parseconfig'
    c=ParseConfig.new('../../.my.cnf') %>

mysqlevn: &mysql
  adapter: mysql 
  username: <%= c.params['client']['user'] %>
  password: <%= c.params['client']['password'] %>
  host: localhost 
  socket: <%= [ 
  '/var/run/mysqld/mysqld.sock',
  '/var/lib/mysql/mysql.sock',
  '/tmp/mysqld.sock',
  '/tmp/mysql.sock'].detect { |socket| File.exist?(socket) } %>

production:
  database: app_production
  <<: *mysql


development:
  database: app_development 
  <<: *mysql

# Do not set this db to the same as development or production.
test:
  database: app_test
  <<: *mysql

ref: http://effectif.com/articles/database- yml-sollte-werden-checked-in

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top