2016-04-03 76 views
2

遇到一個小問題,我希望有人能指引我朝着正確的方向發展。進出口運行一個Rails + Postgres的多容器和他們開始了罰款,除了鐵軌顯示了這個在日誌中,當我試圖訪問負載均衡器的IP:Postgres問題 - Google容器引擎上的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"?): 

我的兩個容器莢文件和我的database.yml是如下:

鋼軌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 FILE

​ 
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'] %> 

我假設它是一個鏈接問題,或者與我指定的PGDATA路徑有關?

回答

1

您的Rails pod看起來像是配置爲與本地運行的postgres實例進行通信。您需要將其配置爲與postgres窗格或服務的IP地址進行通信。

+0

感謝亞歷克斯,你的意思是將本地IP地址硬編碼爲數據庫配置?將試一試,但希望有更多的動態.. –

+1

不,我的意思是配置您的Rails應用程序使用它的DNS名稱與數據庫交談。如果您爲postgres窗格創建服務,那麼您可以告訴Rails使用postgres服務的名稱連接到數據庫。現在看起來假設數據庫在同一臺機器上運行(因此它嘗試使用Unix域套接字)。 –

0

感謝@亞歷克斯 - 羅賓遜爲指導,他的答案是正確的,但有一個與原來的崗位的配置另一個問題:

溶液與用戶名/密碼正確ENV變量修改的database.yml (他們沒有匹配OP中由YAML設置的ENV變量),並且Alex提到要使用該服務的名稱作爲主機名。

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