Доступ к данным database.yml через задачу rake - PullRequest
4 голосов
/ 24 июня 2010

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

system "mysql -u foo -pbar database < backup.sql"

но мне нужно получить доступ к данным config / database.yml для получения информации о пользователе, проходе и базе данных. Хитрость заключается в том, что я не хочу «разбирать» этот файл, но для доступа к этой информации аналогично задачам, таким как rake db: reset do.

Как я могу это сделать?

Ответы [ 3 ]

20 голосов
/ 17 февраля 2012

Это будет работать.

task :demo_using_db_config => :environment do
  db_config = Rails.application.config.database_configuration[Rails.env]
  system "mysql -u#{db_config['username']} -p#{db_config['password']} #{db_config['database']} < backup.sql"
end

Поскольку это зависит от среды, мы хотим, чтобы задача зависела от задачи: environment.

Кроме того, если вы используете ActiveRecord, вы можете получить эту информацию, как показано ниже:

  abcs = ActiveRecord::Base.configurations
  puts abcs[Rails.env]["username"]
  puts abcs[Rails.env]["password"]

Это работает в граблях и в других местах.

6 голосов
/ 19 мая 2011

В Rails 3 с консоли вы можете набрать следующее, чтобы увидеть различные учетные данные для входа в базу данных, которые вы определили в database.yml

config = Rails.application.config.database_configuration

В вашем файле rake вы можете указать что-то вроде этого:

task :mysqlimport_table
  db_config = Rails.application.config.database_configuration[Rails.env]
  sh "mysqlimport -u#{db_config['username']} -p#{db_config['password']} #{db_config['database']} --default-character-set=utf8 --local <path_to_your_file>"
end

task :mysqlrun_sql_script
  db_config = Rails.application.config.database_configuration[Rails.env]
  sh "mysql -u#{db_config['username']} -p#{db_config['password']} -D#{db_config['database']} < <path_to_your_sql_file>"

end
5 голосов
/ 24 июня 2010

Как это:

require 'yaml'
conf = YAML.load_file("path/to/database.yml")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...