Вы можете получить имя пользователя БД, pw, имя базы данных в Rails?



Я пишу задачу рейка, которая делает некоторую работу БД вне Rails/ActiveRecord.



есть ли способ получить информацию о подключении к БД (хост, имя пользователя, пароль, имя БД) для текущей среды, как определено в database.yml?



Я хотел бы получить его, чтобы я мог использовать его для подключения, как это...



con = Mysql.real_connect("host", "user", "pw", "current_db")
752   4  

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
  <<: *mysql

ref:http://effectif.com/articles/database-yml-should-be-checked-in

Comments

    Ничего не найдено.