通过rake任务访问database.yml信息

时间:2010-06-24 15:06:52

标签: mysql ruby-on-rails rake

我正在尝试编写一个rake任务来将数据加载到我的数据库中。我的计划是做类似的事情

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

但我需要访问config / database.yml数据以获取用户,传递和数据库信息。诀窍是我不想“解析”这个文件,但是以与rake db:reset这样的任务相同的方式访问这些信息。

我该怎么做?

3 个答案:

答案 0 :(得分:20)

这会奏效。

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

这适用于rake任务和其他地方。

答案 1 :(得分:6)

在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

答案 2 :(得分:5)

像这样:

require 'yaml'
conf = YAML.load_file("path/to/database.yml")