我有一个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
时,输入密码一切正常。
我做错了什么?
答案 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|
总的来说,代码对我有用。没有错误。