[ruby-on-rails] Можете ли вы получить имя пользователя DB, pw, имя базы данных в Rails?


1 Answers

Ответ Брайана в комментарии выше заслуживает немного больше внимания:

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

Я пишу задачу rake, которая делает некоторые работы DB за пределами Rails / ActiveRecord.

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

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

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



Старый вопрос, но это была одна из моих первых остановок в поиске того, как это сделать, поэтому я полагаю, что это может помочь кому-то другому. Обычно у меня есть файлы .my.cnf в домашнем каталоге. Поэтому использование «parseconfig» gem и некоторого синтаксиса ERB в моем файле конфигурации database.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




Related