Сценарий Ruby зависает при неправильном вызове PG-соединения

У меня есть сценарий Ruby, который подключается к базе данных postgres, выполняет некоторые запросы, а затем закрывает / возвращает данные пользователю.

Скрипт работает нормально, но если я дам ему неправильное имя хоста, весь скрипт просто зависнет, и мне придется из него нажать ctrl-Z. Я знаю, что чтобы обойти это, мне нужно заглянуть в libpq бэкэнд для postgres, но я не знаю, как все это обернуть в свой скрипт ruby. Я использую Ruby 1.8 и pg gem для обработки материала postgres, вызов для открытия соединения:

myConnection = PGconn.connect(host,port,pgOptions,pgTTY,name,user,password)

(параметры и tty - это просто пустые строки)

Любая помощь / советы / предложения были бы замечательными!


person Will Bates    schedule 04.01.2013    source источник
comment
Он должен истечь через минуту или две. Вы ждете тайм-аута TCP.   -  person derobert    schedule 05.01.2013
comment
Я настоятельно рекомендую изучить использование Sequel для управления подключениями к БД. Это делает жизнь намного проще. Ознакомьтесь с Cheatsheet, чтобы оценить, насколько хорошо он работает.   -  person the Tin Man    schedule 05.01.2013


Ответы (1)


Существует опция connect_timeout, поэтому вы можете сделать это так: USING STRING connection_string = "host = YOUR_HOST port = YOUR_PORT connect_timeout = YOUR_TIMEOUT PERIOD" PGconn.connect (connection_string)

PGconn.connect также предлагает более рубиновую хеш-нотацию.

: host => YOU_HOST,: port => YOUR_PORT,: connect_timeout => YOUR_TIMEOUT_PERIOD

Также вы можете обернуть это в начало спасения, чтобы остальная часть вашего кода не запускалась, если время ожидания соединения истекло.

Отказ от ответственности: я на самом деле не тестировал это, но это часть документации для pg gem

http://deveiate.org/code/pg/

person engineersmnky    schedule 06.03.2013