2014-11-20 18 views
10

Bunun için etrafında avlanan ettik ve sadece bir çözüm bulamıyor.Rails database_url ve Unix Soket Via Postgres bağlanma

Şu anda başarıyla Unix soket üzerinde yerel bir pgBouncer sunucuya bağlı bir database.yml var. Ancak, bir database_url ortam değişkeni için bu ayarı geçiş ediyorum ve Unix soket aracılığıyla yerel bir Postgres sunucusuna bağlanmak için nasıl hiç dışarı çalışamaz. localhost açıkçası Tamam çalışıyor.

ben görünüşe Postgres ile kullanabilirsiniz şöyle bir URL'ye (http://www.postgresql.org/docs/9.2/interactive/libpq-connect.html) bakıyordu:

export DATABASE_URL="postgresql://[email protected]%Fvar%Frun%Fpostgresql%F.s.PGSQL.6432/dbname" 

Ancak bu URI polis geçmiş olsun olmaz:

rubies/ruby-2.1.5/lib/ruby/2.1.0/uri/common.rb:176:in `split': bad URI(is not URI?): postgresql://[email protected]%Fvar%Frun%Fpostgresql%F.s.PGSQL.6432/dbname 

Bunun için gerekli olan gizli sos hakkında herhangi bir fikri olan var mı? Googles'ı sonsuza dek yaptım ve hiçbir şey bulamadım. Uygulama şu an bir soket üzerinden bağlandığından mümkün olmalıdır. Çok gibi, unix soket kullanmak ev sahipliği ihmal gerekir

postgresql://[email protected]/database?socket=/path/to/socket 

cevap

1

önceden

sayesinde, basitçe

postgres:///dbname 

Bu, psql> 9.2 ile çalışır.

Ben veritabanı URL taşıma rayları ile çalışır emin değilim.

11

:

postgres://[email protected]/dbname 

veya bir sorgu parametresi olarak soket geçebilir

+1

Bu, Raylar 4.2.5 ve PostgreSQL 9.3 –

8

31.1.1.2. Connection URIs

URI bir bağlantı için genel formu:

postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&...]

URI şeması designator ya postgresql olabilir: // veya postgres: //. URI bölümlerinin her biri isteğe bağlıdır. Aşağıdaki örnekler geçerli URI sözdizimi kullanır göstermektedir:

URI hiyerarşik kısmının

postgresql:// postgresql://localhost postgresql://localhost:5433 postgresql://localhost/mydb postgresql://[email protected] postgresql://user:[email protected] postgresql://[email protected]/otherdb?connect_timeout=10&application_name=myapp

Bileşenler da parametre olarak verilebilir. Örneğin:

postgresql:///mydb?host=localhost&port=5433

Yüzde kodlayan tanım parçaları herhangi bir özel anlamı ile semboller dahil etmek için de kullanılabilir.

Herhangi bağlantı parametreleri Bölüm 31.1 listelenen anahtar kelimelere tekabül değil.2 göz ardı edilir ve bunlarla ilgili bir uyarı mesajı stderr'e gönderilir.

JDBC bağlantı URI'leriyle geliştirilmiş uyumluluk için, parametresi ssl=true parametreleri sslmode=require'a çevrilir. Ana makine parçası, ana bilgisayar adı veya bir IP adresi olabilir. Bir IPv6 ana adresi belirlemek için, köşeli parantezler içine alın:

postgresql://[2001:db8::1234]/database

ana bileşeni yorumlanır parametre ana için tarif edildiği gibi. Özellikle, ana makine boşsa veya bir eğik çizgi ile başlarsa Unix alan soketi bağlantısı seçilir, aksi takdirde TCP/IP bağlantısı başlatılır. Ancak, eğik çizgi URI'nin hiyerarşik bölümünde ayrılmış bir karakter olduğunu unutmayın. Yani, ev sahibi bileşeninde yolunu bir standart dışı Unix alan soketi dizini belirtin ya URI barındırmasına şartname ihmal ve parametre olarak ev sahibi belirtin veya yüzde kodlamak için URI:

postgresql:///dbname?host=/var/lib/postgresql

postgresql://%2Fvar%2Flib%2Fpostgresql/dbname

+0

localhost ile TCP/IP üzerinden bağlantı kuramaz (127.0.0.1, :: 1, fe80 ::% 1 lo0 vb.) Ile çalışmaz. Unix soketini OP gibi kullanmak için ana makineyi atlatmak istendi. –

+0

cevabı güncellendi – blnc

+1

Lies yalan! 'Postgresql: // user: pass/dbname' kullanıyorum. Yukarıdakilerin birçok varyasyonunu denedim. Raylar gibi görünüyor 3.2.21. Uygulamadan (openproject) anlamlı bir hata mesajı alıyorum, ama tcp formu en azından pg ile bir auth hatası kaydeder. @ J.Money – Otheus

0

Genel olarak libpq kullanılıyorsa @blnc tarafından sağlanan cevap doğrudur. Ancak, Activerecord veya RubyonRails kullanıyorsanız, en azından 3.2.21 numaralı sürümde, bu modül doğrudan libpq'e göndermek yerine URI'yi Ruby'nin URI.parse ürününü ayrıştırır. URI.parse burada boş bir hostname işlemez. ev sahibi olmadan

irb(main):020:0> URI.parse "postgresql://user:[email protected]/dbname" 
=> #<URI::Generic:0x7f72b17f04d8 URL:postgresql://user:[email protected]/dbname> 

Ama:

irb(main):021:0> URI.parse "postgresql://user:[email protected]/dbname" 
URI::InvalidURIError: the scheme postgresql does not accept registry part: user:[email protected] (or bad hostname?) 
     from /usr/lib/ruby/1.8/uri/generic.rb:195:in `initialize' 
     from /usr/lib/ruby/1.8/uri/common.rb:492:in `new' 
     from /usr/lib/ruby/1.8/uri/common.rb:492:in `parse' 
     from (irb):21 
     from /usr/lib/ruby/1.8/uri/generic.rb:556 

özel URI ayrıştırma kod ekleyerek (ya ActiveRecord değiştirmeden) olmadan bu düzeltmek için bir yol olduğu görülmektedir.

İlgili konular