У нас есть некоторый Ruby-код, который выполняет что-то вроде:
require 'pg'
# Create a remote Postgres database instance, and wait
# until it's online, then try to connect:
conn = PG::Connection.new(
... params ...
sslmode: 'require')
Важной частью является то, что удаленный экземпляр Postgres настроен так, что использование SSL является обязательным (например, , например, )- sslmode: 'require'
в клиентском коде является избыточным.
Это прекрасно работает на многих машинах разработчика, но некоторые разработчики замечают, что они получают ошибку вроде:
FATAL: no pg_hba.conf entry for host "...", user "...", database "...", SSL off (PG::ConnectionBad)
икоренной причиной, по-видимому, является то, что их гем pg
на самом деле не имеет поддержки SSL.
Мой вопрос: есть ли способ определить, действительно ли гем pg
имеет поддержку SSL, безна самом деле пытается подключиться к серверу, требующему SSL ?(Было бы намного лучше, если бы мы могли сразу же обнаружить проблему, вместо того, чтобы ждать, пока не будет создан удаленный экземпляр Postgres, и только потом обнаруживать проблему.)
Моей первой мыслью было проверить метод наpg
гем, такой как init_openssl , но в документации утверждается:
Когда поддержка SSL не скомпилирована, эта функция присутствует, но ничего не делает.
и это поведение одинаково, независимо от того, присутствует поддержка SSL или нет:
2.3.1 :002 > PG.init_openssl(true, true)
=> nil
Информация о среде: ruby 2.3 на последней OS X, pg
gem 0.19.0, различные версииlibpq