我想写一个rake任务来将数据加载到我的数据库中。我的计划是做类似通过rake任务访问database.yml信息
system "mysql -u foo -pbar database < backup.sql"
但我需要访问config/database.yml数据以获取用户,传递和数据库信息。诀窍是我不想“解析”这个文件,而是以同样的方式访问这些信息,比如rake db:reset do。
我该怎么做?
我想写一个rake任务来将数据加载到我的数据库中。我的计划是做类似通过rake任务访问database.yml信息
system "mysql -u foo -pbar database < backup.sql"
但我需要访问config/database.yml数据以获取用户,传递和数据库信息。诀窍是我不想“解析”这个文件,而是以同样的方式访问这些信息,比如rake db:reset do。
我该怎么做?
像这样:
require 'yaml'
conf = YAML.load_file("path/to/database.yml")
在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
这将工作。
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
由于这是特定环境,我们希望任务依赖于:环境任务。
或者,如果你正在使用ActiveRecord的,你可以得到这个信息象下面这样:
abcs = ActiveRecord::Base.configurations
puts abcs[Rails.env]["username"]
puts abcs[Rails.env]["password"]
这个作品在耙任务和其他地方。
http://yaml4r.sourceforge.net/doc/例子:http://yaml4r.sourceforge.net/doc/page/parsing_yaml_documents.htm – DrColossos 2010-06-24 15:14:26
其实,我写错了我的问题。我不想“解析”文件,而是要“访问”那里的数据。我的意思是,我知道rake加载这些数据是因为它可以完成db:reset等工作,对吗?我只需要这些信息的变量名称。我会稍微编辑一下我的问题以反映这一点。 – 2010-06-24 15:24:39