Ende 2012 scheinen sich die Dinge geändert zu haben. Obwohl die Dokumentation immer noch spärlich ist, scheint das pg-Gem SSL automatisch auszuhandeln, und die jdbc-Treiber können dazu gezwungen werden, SSL zu verwenden.
Meine App ist eine hybride MRI-jRuby-App, die auf Heroku-Postgres zugreift, einen Cloud-Postgresql-Server, der SSL erfordert.
# Gemfile.lock
pg (0.14.1)
activerecord-jdbc-adapter (1.2.2.1)
activerecord-jdbcpostgresql-adapter (1.2.2.1)
jdbc-postgres (9.1.901)
Das pg gem schien SSL automatisch auszuhandeln. Der JDBC-Adapter jedoch nicht. MRI verbunden mit einer typischen database.yml (keine Erwähnung von ssl), aber JDBC warf:
(FATAL: no pg_hba.conf entry for host "xx.xx.xx.xx", user "username", database "database", SSL off)
Ich habe schließlich versucht, die Verbindungsdetails im JDBC-URL-Format anzugeben, und die Verbindung war erfolgreich:
# jruby database.yml
production:
adapter: jdbcpostgresql
url: jdbc:postgresql://host/database?user=user&password=password&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
(ssfactory wird möglicherweise nicht für alle Setups benötigt)