Вы можете получить имя пользователя БД, pw, имя базы данных в Rails?
Я пишу задачу рейка, которая делает некоторую работу БД вне Rails/ActiveRecord.
есть ли способ получить информацию о подключении к БД (хост, имя пользователя, пароль, имя БД) для текущей среды, как определено в database.yml?
Я хотел бы получить его, чтобы я мог использовать его для подключения, как это...
con = Mysql.real_connect("host", "user", "pw", "current_db")
4 ответов:
из rails вы можете создать объект конфигурации и получить от него необходимую информацию:
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"]посмотреть документация для рельсов:: конфигурация для деталей.
Это просто использует YAML:: load загрузить конфигурацию из файла конфигурации базы данных (
database.yml) который вы можете использовать самостоятельно, чтобы получить информацию из внешней среды rails:require 'YAML' info = YAML::load(IO.read("database.yml")) print info["production"]["host"] print info["production"]["database"] ...
ответ Брайана в комментарии выше заслуживает немного больше внимания:
>> 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возвращает конфигурацию соединения в хэше:
=> {:adapter=>ADAPTER_NAME, :host=>HOST, :port=>PORT, :database=>DB, :pool=>POOL, :username=>USERNAME, :password=>PASSWORD}
как
tpettзаметил в своем комментарии: это решение учитывает слияние конфигурации сdatabase.ymlи от переменной окруженияDATABASE_URL.
старый вопрос, но это была одна из моих первых остановок в поиске, как это сделать, поэтому я считаю, что это может помочь кому-то еще. Обычно у меня есть.my.cnf файлы в домашнем каталоге. Поэтому, используя драгоценный камень "parseconfig" и некоторый синтаксис ERB в моей базе данных.файл конфигурации yml означает, что у меня есть динамический файл, который я могу чувствовать себя хорошо о проверке в системе управления версиями, а также упростить развертывание (в моем случае). Также обратите внимание на список общих сокетов, это упрощает перемещение моего приложения в разные операционные системы это может иметь другой путь сокета Unix.
<% 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 <<: *mysqlref:http://effectif.com/articles/database-yml-should-be-checked-in
Comments