2016-03-25 4 views
1

Я искал в архиве, но не смог найти ответ на свою дилемму. Я кодирую в Ruby и использую структуру watir webdriver на своем локальном Mac Yosemite и хочу подключиться к базе данных postgres в linux box.Не удалось подключиться к postgresQL с Ruby

Я установил необходимые рубиновые камни на моем локальном компьютере Mac

* МЕСТНЫЙ GEMS *

  • DBD-пг (0.3.9)
  • пг (0.18.4)
  • dbi (0.4.5, 0.4.4)

Я использую следующий код.

require 'rubygems' 
require 'pg' 
require 'dbd/pg' 
require 'dbi' 
conn = PGconn.connect("10.0.xx.xx","5432",'','',"mydbname","dbuser", "") 
res = conn.exec('select * from priorities_map;') 
puts res.getvalue(0,0)  
conn.close if conn 

При управлении этой я получаю эти ошибки

.initialize': Could not connect to server: Connection refused (PG::ConnectionBad) 

Is the server running on host "10.0.xx.xx" and accepting 
TCP/IP connections on port 5432? 

Если я использовать код

dbh = DBI.connect("dbi:pg:mydbname:ipaddress", "user", "") 
row = dbh.exec('select * from etr_priorities_map;') 
puts row.getvalue(0,0) 
dbh.disconnect if dbh 

Я получаю ошибку

block in load_driver': Unable to load driver 'pg' (underlying error: wrong constant name pg) (DBI::InterfaceError) from System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize' 

Я новичок Рубин. Как я могу решить эти проблемы?

+1

можете ли вы подключить telnet к порту 5432 на этом IP-адресе? Является ли postgresql прослушиванием этого IP-адреса? первое сообщение об ошибке - это сервер, отрицающий соединение, не связанный с вашим кодом и т. д. Будет изменен, если он не прослушивается. – Doon

ответ

0

Первая ошибка, так как @Doon говорит в комментариях, поступает из TCP-соединения и обычно означает, что ваша база данных не прослушивает сеть. Большинство пакетов PostgreSQL имеют конфигурацию по умолчанию, которая разрешает только локальные подключения, но вы можете разрешать подключения по сети в конфигурации сервера с помощью настройки listen_addresses. Я установил PostgreSQL через Homebrew на своем Mac, а моя конфигурация - /usr/local/var/postgres/postgresql.conf, но если вы установили его каким-то другим способом, путь может быть другим.

Вторая ошибка происходит из-за того, что часть «драйвера» строки подключения is case-sensitive и драйвер DBD для Postgres имеют имя Pg, а не pg. Попробуйте это:

dbh = DBI.connect("dbi:Pg:mydbname:ipaddress", "user", "") 

Кроме того, если у вас есть сердце набор на использовании Ruby/DBI, вы можете рассмотреть возможность использования более-недавно поддерживается библиотекой. Ruby-DBI очень хорошо написан и протестирован, но с 2010 года он не видел выхода, а Ruby сам по себе значительно изменился.

Если вы хотите, чтобы рассмотреть альтернативные варианты, я использую Sequel для в основном все, и я очень рекомендую, особенно для развития Postgres, но оба DataMapper и ActiveRecord больших пользователей системы, а также.

+0

Я знаю, что я не должен благодарить вас за этот фантастический форум, но я все равно это сделаю. Спасибо @Doon и @ Майкл. Все работает. Изменена настройка listen_addresses на *. –

+0

Не знаю о продолжении. Я начинаю с этого. –

+0

Если это сработало, вы можете принять этот ответ. Это побуждает людей чаще отвечать на вопросы. :) –

Смежные вопросы