2016-04-03 23 views
2

Biraz sorunla karşılaştım ve birisinin beni doğru yönde gösterebileceğini umuyorum. Im bir Raylar + Postgres çoklu kabı koşu ve ben LoadBalancer IP'sini erişmeye çalıştıklarında onlar günlüklerinde bu gösterir raylar hariç, ince başlama:Postgres issue - Google Container Engine'de Ruby on Rails (Postgres)

PG::ConnectionBad (could not connect to server: No such file or directory 
Is the server running locally and accepting connections on 
Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?): 

Benim iki konteyner pod dosya ve benim database.yml vardır aşağıdaki gibi:

RAYLARI POD

apiVersion: v1 
kind: Pod 
metadata: 
    name: cartelhouse 
    labels: 
    name: cartelhouse 
spec: 
    containers: 
    - image: gcr.io/xyz/cartelhouse:v6 
     name: cartelhouse 
     env: 
     - name: POSTGRES_PASSWORD 
      # Change this - must match postgres.yaml password. 
      value: mypassword 
     - name: POSTGRES_USER 
      value: rails 
     ports: 
     - containerPort: 80 
      name: cartelhouse 
     volumeMounts: 
      # Name must match the volume name below. 
     - name: cartelhouse-persistent-storage 
      # Mount path within the container. 
      mountPath: /var/www/html 
    volumes: 
    - name: cartelhouse-persistent-storage 
     gcePersistentDisk: 
     # This GCE persistent disk must already exist. 
     pdName: rails-disk 
     fsType: ext4 
​ 
​ 

POSTGRES POD

apiVersion: v1 
kind: Pod 
metadata: 
    name: postgres 
    labels: 
    name: postgres 
spec: 
    containers: 
    - name: postgres 
     image: postgres 
     env: 
     - name: POSTGRES_PASSWORD 
      value: mypassword 
     - name: POSTGRES_USER 
      value: rails 
     - name: PGDATA 
      value: /var/lib/postgresql/data/pgdata 
     ports: 
     - containerPort: 5432 
      name: postgres   
     volumeMounts: 
     - name: postgres-persistent-storage 
      mountPath: /var/lib/postgresql/data 
    volumes: 
    - name: postgres-persistent-storage 
     gcePersistentDisk: 
     # This disk must already exist. 
     pdName: postgres-disk 
     fsType: ext4 
​ 

database.yml DOSYA

​ 
production: 
    <<: *default 
    adapter: postgresql 
    encoding: unicode 
    database: app_production 
    username: <%= ENV['PG_ENV_POSTGRES_USER'] %> 
    password: <%= ENV['PG_ENV_POSTGRES_PASSWORD'] %> 
    host:  <%= ENV['PG_PORT_5432_TCP_ADDR'] %> 

Ben, onun bir bağlantı sorunu varsayalım veya PGDATA yolları ile ilgili bir şey belirttiğim?

cevap

1

Rails pod'unuz yerel olarak çalışan bir postgres örneğiyle konuşmak üzere yapılandırılmış gibi görünüyor. Postgres bölmesinin veya hizmetinin IP adresiyle konuşmak için yapılandırmanız gerekir.

+0

Teşekkürler Alex, yerel IP adresini veritabanı yapılandırmasına kodlamaktan mı bahsediyorsunuz? Bir deneyecek ama daha dinamik bir şey umuyordum .. –

+1

Hayır, Rails uygulamanızı, DNS adını kullanarak veritabanına konuşmak için yapılandırmaktan bahsediyorum. Postgres bölmesi için bir hizmet oluşturursanız, Rails'e postgres hizmetinin adını kullanarak DB'ye bağlanmasını söyleyebilirsiniz. Şu anda DB'nin aynı makinede çalıştığını varsayıyormuş gibi görünüyor (dolayısıyla bir Unix alan soketinin kullanılması denendi). –

0

Teşekkür alex-robinson @ rehberlik için ve orijinal yayının yapılandırma ile başka bir sorun olmamasına rağmen onun cevabı, doğrudur için:

Çözüm kullanıcı adı/şifre doğru ENV değişkenleri ile database.yml değiştirmek olan (OP'de YAML tarafından belirlenen ENV değişkenleriyle uyuşmuyorlardı) ve Alex'in hostname için hizmetin adını kullanmasından bahsetmişti.

production: 
    <<: *default 
    adapter: postgresql 
    encoding: unicode 
    database: rails_production 
    username: <%= ENV['POSTGRES_USER'] %> 
    password: <%= ENV['POSTGRES_PASSWORD'] %> 
    host:  postgres