2010-06-24 1 views
4

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

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

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

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

+0

http://yaml4r.sourceforge.net/doc/ Примеры: http://yaml4r.sourceforge.net/doc/page/parsing_yaml_documents.htm – DrColossos

+0

Собственно, я написал свой вопрос неправильно. Я не хочу «разбирать» файл, но «получать доступ» к ним. Я имею в виду, я знаю, что рейк загружает эти данные, потому что он может делать такие вещи, как db: reset и так, правильно? Мне просто нужны имена переменных, которые ссылаются на эту информацию. Я немного отредактирую свой вопрос, чтобы это отразить. –

ответ

6

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

конфиг = Rails.application.config .database_configuration

В файле граблей, можно указать что-то вроде этого:

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 
19

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

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"] 

Это работает в задачах рек и в других местах.

Смежные вопросы