连接到postgres数据库返回&#34;角色<user>不存在&#34;但是用户存在</user>

时间:2014-05-07 08:06:29

标签: ruby postgresql ssh

我有一个Rails应用程序,它有自己的数据库服务器和AWS上托管的从属数据库服务器(readonly)。

Rails应用程序可以很好地连接到数据库,我还可以使用“psql”命令行界面连接到从数据库服务器。

对于我正在编写的脚本,我想直接使用“pg”gem但接收“角色”部署“不存在(PG :: ConnectionBad)”错误。

这是我用来连接db的代码:

require 'pg'
require 'net/ssh'

def copy_user(id)
  db_password = prompt_db_password

  puts 'Connecting to slave db server...'
  server = <address> # db slave
  Net::SSH.start(server, 'deploy') do |ssh|
    puts 'Connecting to database...'

    ssh.open_channel do |ch|
      connection = connect_with_pg(db_password)
      result = connection.exec('SELECT COUNT(*) FROM items')
      puts result[0]['count']
    end
  end
end

def connect_with_pg(db_password)
  PG.connect(host: 'localhost', user: 'deploy', password: db_password, dbname: 'my_db_name')
end

用户“部署”确实存在,当我ssh到从属数据库服务器并运行psql -h localhost -U deploy my_db_name时,输入密码一切正常。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

你能尝试不同的语法吗?

 PG.connect(:host=> 'localhost', :user => 'deploy', :password =>db_password, :dbname => 'my_db_name')

同样在SSH.start中,使用户成为变量。并使用密码。 我发现了一些奇怪的错误报告。

 password = <password>
    user = "deploy"
    Net::SSH.start(server, user, :password => password) do |ssh|

总的来说,代码对我有用。没有错误。