2016-04-03 44 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