我正在尝试编写一个rake任务来将数据加载到我的数据库中。我的计划是做类似的事情
system "mysql -u foo -pbar database < backup.sql"
但我需要访问config / database.yml数据以获取用户,传递和数据库信息。诀窍是我不想“解析”这个文件,但是以与rake db:reset这样的任务相同的方式访问这些信息。
我该怎么做?
答案 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")