目前,我在rails rake任务中使用pg gem,这非常适合我想做的事情我创建一个变量pg_conn并将连接详细信息传递给PGconn.connect方法我只是不想每次数据库用户名/密码更改时都更改这个rake任务。如何将登录详细信息从yaml文件传递到pg_conn命令请看下面的代码:

namespace :update_table do
  task :import => :environment do

$pg_conn = PGconn.connect(host =  "samsi-postgres-90s", port = 6433, options = '', tty ='',      dbname = "installs", login = "reports_m", password = "password")

my_query = "select * from all_tables"

   conn.query(my_query) do |raw_row|
     puts raw_row
   end

  end
end

理想情况下,我希望将凭证详细信息的哈希值传递给pg_conn连接变量,如下所示:
$pg_conn = PGconn.connect(yamlfile[:host], yamlfile[:port], '', '', yamlfile[:database], yamlfile[:username], yamlfile[:password])

我该怎么做谢谢你的帮助!

最佳答案

对于Rails3,您可以在rake任务中使用Rails.configuration

  config   = Rails.configuration.database_configuration
  host     = config[Rails.env]["host"]
  database = config[Rails.env]["database"]
  username = config[Rails.env]["username"]
  password = config[Rails.env]["password"]

只需确保在rake任务中继承环境,比如
task :users => :environment do

08-07 06:11