2010-06-24 68 views
4

我想写一个rake任务来将数据加载到我的数据库中。我的计划是做类似通过rake任务访问database.yml信息

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

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

我该怎么做?

+0

http://yaml4r.sourceforge.net/doc/例子:http://yaml4r.sourceforge.net/doc/page/parsing_yaml_documents.htm – DrColossos 2010-06-24 15:14:26

+0

其实,我写错了我的问题。我不想“解析”文件,而是要“访问”那里的数据。我的意思是,我知道rake加载这些数据是因为它可以完成db:reset等工作,对吗?我只需要这些信息的变量名称。我会稍微编辑一下我的问题以反映这一点。 – 2010-06-24 15:24:39

回答

4

像这样:

require 'yaml' 
conf = YAML.load_file("path/to/database.yml") 
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 

由于这是特定环境,我们希望任务依赖于:环境任务。

或者,如果你正在使用ActiveRecord的,你可以得到这个信息象下面这样:

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

这个作品在耙任务和其他地方。