2016-03-25 9 views
1

Ich habe im Archiv gesucht, konnte aber keine Antwort auf mein Dilemma finden. Ich schreibe in Ruby und benutze watir webdriver framework auf meinem lokalen Mac Yosemite und möchte eine Postgres-Datenbank auf einer Linux-Box verbinden.Konnte keine Verbindung zu PostgresQL mit Ruby

Ich habe die erforderlichen Rubin Edelsteine ​​auf meinem lokalen Mac installiert

* LOCAL GEMS *

  • DBD-pg (0.3.9)
  • pg (0.18.4)
  • dbi (0.4.5, 0.4.4)

Ich verwende den folgenden Code.

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 

Auf dieser läuft ein ich diese Fehler immer

.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? 

Wenn ich den Code

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 

Ich erhalte den Fehler

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' 

Ich bin neu in Rubin. Wie kann ich diese Probleme lösen?

+1

können Sie Telnet an Port 5432 auf dieser IP-Adresse? Greift postgresql auf diese IP zu? Die erste Fehlermeldung ist, dass der Server die Verbindung verweigert, nichts mit Ihrem Code zu tun hat. Ändert das, wenn es nicht zuhört. – Doon

Antwort

0

Der erste Fehler, wie @Doon in den Kommentaren sagte, kommt von der TCP-Verbindung und bedeutet normalerweise, dass Ihre Datenbank nicht im Netzwerk abhört. Die meisten PostgreSQL-Pakete enthalten eine Standardkonfiguration, die nur lokale Verbindungen zulässt, aber Sie können Verbindungen über das Netzwerk in der Serverkonfiguration über die Einstellung listen_addresses aktivieren. Ich habe PostgreSQL über Homebrew auf meinem Mac installiert, und meine Konfiguration ist unter /usr/local/var/postgres/postgresql.conf, aber wenn Sie es auf andere Weise installiert haben, kann der Pfad anders sein.

Der zweite Fehler tritt auf, weil der "Treiber" -Teil der Verbindungszeichenfolge is case-sensitive und der DBD-Treiber für Postgres Pg heißt, nicht pg. Versuchen Sie folgendes:

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

Auch wenn Sie Ihr Herz auf mit Ruby/DBI gesetzt haben, möchten Sie vielleicht eine mehr vor kurzem gehalten Bibliothek prüfen, mit. Ruby-DBI ist sehr gut geschrieben und getestet, aber seit 2010 gibt es keine Veröffentlichung mehr, und Ruby selbst hat sich in der Zwischenzeit ziemlich stark verändert.

Wenn Sie Alternativen prüfen wollen, verwende ich Sequel für fast alles, und ich kann es sehr empfehlen, vor allem für Postgres Entwicklung, aber beide DataMapper und ActiveRecord haben eine große Nutzerbasis als auch.

+0

Ich weiß, dass ich auf diesem fantastischen Forum nicht Danke sagen soll, aber ich werde es trotzdem tun. Danke @Doon und @ Michael. Alles läuft. Die Einstellung listen_addresses wurde auf * geändert. –

+0

Ich wusste nichts über Sequel. Fange damit an. –

+0

Wenn es funktioniert, können Sie diese Antwort akzeptieren. Das ermutigt Leute, die auf Fragen antworten, öfter zu antworten. :) –