1

目前,我在我的 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])

我怎样才能做到这一点?感谢您的帮助!

4

2 回答 2

2

对于 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
于 2013-04-10T14:11:47.363 回答
1

鉴于此 Yaml 文件:

:host: samsi-postgres-90s
:port: 6433
:database: installs
:username: reports_m
:password: password

你可以这样加载它:

require 'yaml'
yamlfile = YAML.load(open('your_file_path'))

然后你可以写:

yamlfile[:host] # => "samsi-postgres-90s"

等等

于 2013-04-10T13:52:36.233 回答