【问题标题】:Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"服务器是否在本地运行并接受 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”上的连接
【发布时间】:2015-08-13 07:47:07
【问题描述】:

我正在通过 Ansible 配置“Precise64”Ubuntu 机器,在确保数据库确实已创建时遇到错误。我正在使用大部分https://github.com/jcalazan/ansible-django-stack

- name: Install PostgreSQL
  apt: name={{ item }} update_cache={{ update_apt_cache }} state=installed
  with_items:
    - postgresql
    - postgresql-contrib
    - python-psycopg2
  tags: packages

- name: Ensure the PostgreSQL service is running
  service: name=postgresql state=started enabled=yes

- name: Ensure database is created
  sudo_user: postgres
  postgresql_db: name={{ db_name }}
                 encoding='UTF-8'
                 lc_collate='en_US.UTF-8'
                 lc_ctype='en_US.UTF-8'
                 template='template0'
                 state=present

但是,当我到达最后一个任务时,我收到了这个错误:

失败:[默认] => {“失败”:真,“剧本”:“vagrant.yml”, “角色”:“db”,“任务”:“确保数据库已创建”} msg:无法 连接到数据库:无法连接到服务器:没有这样的文件或 目录服务器是否在本地运行并接受连接 Unix域套接字“/var/run/postgresql/.s.PGSQL.5432”?

致命:所有主机都已失败 -- 正在中止

【问题讨论】:

  • "/var/run/postgresql>/.s.PGSQL.5432" 看起来很奇怪。你确定 > 应该在那里吗?
  • 感谢您的注意,这是一个错字:)

标签: postgresql ansible


【解决方案1】:

经过一些调试后,我通过安装语言包使其正常工作,因此 postgres 守护进程在启动时不会抱怨语言环境

- name: Install Language packages
  apt: name=language-pack-en update_cache={{ update_apt_cache}} force=yes state=latest
  tags: packages

【讨论】:

    【解决方案2】:

    我的 Ubuntu 14.04 LTS 上的 ansible 和 vagrant 也有同样的问题。阿方索的回答并没有解决问题。

    我意识到 vagrant 会将本地化设置从我的系统(不是 en_US)复制到虚拟系统。这导致了数据库创建问题。

    vagrant up 之前运行以下shell 代码解决了这个问题:

    export LANGUAGE=en_US
    export LC_CTYPE="en_US.UTF-8"
    export LC_NUMERIC="en_US.UTF-8"
    export LC_TIME="en_US.UTF-8"
    export LC_COLLATE="en_US.UTF-8"
    export LC_MONETARY="en_US.UTF-8"
    export LC_MESSAGES="en_US.UTF-8"
    export LC_PAPER="en_US.UTF-8"
    export LC_NAME="en_US.UTF-8"
    export LC_ADDRESS="en_US.UTF-8"
    export LC_TELEPHONE="en_US.UTF-8"
    export LC_MEASUREMENT="en_US.UTF-8"
    export LC_IDENTIFICATION="en_US.UTF-8"
    

    这会暂时更改本地化设置,以便将en_US 复制到虚拟系统。

    【讨论】:

    • 这更有意义,我不知道我是怎么做到的,接受你的回答,先生 :)
    【解决方案3】:

    @damgad 的答案确实对我有用,但由于我很懒,我不想每次需要设置 Postgresql 时都导出所有这些环境变量。

    我可以将它放入我的 .bash_rc 或类似文件中,但我也不希望在帐户范围内定义它,因为这里的重点是因为我有不同的语言环境。

    因此,使用@alfonso-perez 的部分初始答案,我最终使用了这两个额外的任务,并且不必再次导出任何内容:

    - name: Install Language packages
      apt: name=language-pack-en update_cache={{ update_apt_cache }} force=yes state=latest
      tags: packages
    
    - name: Locale (is a b****)
      locale_gen: name={{ item }} state=present
      with_items:
        - en_US
        - en_US.UTF-8
        - pt_BR.UTF-8
        - de_DE.UTF-8
    
    - name: Install PostgreSQL
      apt: name={{ item }} update_cache={{ update_apt_cache }} state=installed
      with_items:
        - postgresql-9.3
        - postgresql-contrib-9.3
        - postgresql-server-dev-9.3
        - python-psycopg2
      tags: packages
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-24
      • 2015-05-09
      • 2020-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多