【问题标题】:postgres in vagrant(ubuntu14.04)无业游民中的postgres(ubuntu14.04)
【发布时间】:2014-12-03 17:13:25
【问题描述】:

我尝试使用 vagrant 创建简单的开发环境,但在使用 postgres 时遇到了问题。

我的 Vagrantfile 很简单:

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.network "forwarded_port", guest: 8000, host: 8000
  config.vm.network :public_network

  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "playbook.yml"
  end
end

我使用 ansible 来提供:

- name: Configure development machine
  hosts: all
  sudo: True
  tasks:
    - name: install postgres
      apt: name={{ item }} update_cache=yes
      with_items:
        - postgresql 
        - postgresql-contrib

但是出了点问题,postgres 安装不正确

当我 ssh 到 VM 并看到奇怪的事情时:

 $ /etc/init.d/postgresql start
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LC_TIME = "uk_UA.UTF-8",
        LC_MONETARY = "uk_UA.UTF-8",
        LC_ADDRESS = "uk_UA.UTF-8",
        LC_TELEPHONE = "uk_UA.UTF-8",
        LC_NAME = "uk_UA.UTF-8",
        LC_MEASUREMENT = "uk_UA.UTF-8",
        LC_IDENTIFICATION = "uk_UA.UTF-8",
        LC_NUMERIC = "uk_UA.UTF-8",
        LC_PAPER = "uk_UA.UTF-8",
        LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
psql: could not connect to server: No such file or directory
        Is the server running locally and accepting

并且没有 /etc/postgresql 目录(但是 /etc/postgresql-common 存在)有什么想法吗?

Github repo

【问题讨论】:

  • 你可以试试env -i /etc/init.d/postgresql start 来确认它的语言环境问题吗?
  • @gslin 我也有同样的问题,只是使用了不同的语言环境,el_GR 而不是 uk_UA。这是您的要求: vagrant@vagrant-ubuntu-trusty-64:~$ sudo env -i /etc/init.d/postgresql start * 不存在 PostgreSQL 集群;参见“man pg_createcluster”
  • 我对 Ubuntu 中的设置不太熟悉,但在 RHEL/Centos 中,您必须先执行“service postgresql initdb”才能创建集群。也许尝试/etc/init.d/postgresql initdb 或失败pg_ctl initdb
  • 通过使用以下任务生成 el_GR.UTF-8 语言环境来解决它:locale_gen: name=el_GR.UTF-8 state=present。之后 Postgres 安装并启动正常。但是如果我不想生成语言环境怎么办?有没有办法让 ansible/vagrant 忽略我的主机笔记本电脑区域设置并仅在 vm 中坚持使用 en_US.UTF-8?

标签: postgresql vagrant ubuntu-14.04 ansible


【解决方案1】:

将以下行添加到 shell 启动文件中

LANGUAGE=en_US.UTF-8
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

然后运行(以root权限)

locale-gen en_US.UTF-8
dpkg-reconfigure locales

【讨论】:

  • 我可以使用 ansible 执行 dpkg-reconfigure locales 步骤吗(它是否以非交互方式工作)?如果你能写下 ansible 任务来执行你的指令,那就更好了。谢谢。
  • 我对 Ansible 不是很熟悉,但是这个模块可能是你需要的 docs.ansible.com/locale_gen_module.html(这里有更多文档的源代码 github.com/ansible/ansible-modules-extras/blob/…)。如果这不起作用,您可以将这些命令保存为 shell 脚本并使用 - shell: locale_script.sh 运行
【解决方案2】:

您可以在 ubuntu 机器上登录并使用以下命令重新配置语言环境来解决此问题:

dpkg-reconfigure locales

然后选择你想要的语言环境。

解决语言环境问题后,您可能希望使用以下命令初始化 postgres 的集群和结构:

/etc/init.d/postgresql start

之后,您应该正确配置它。我用的是postgres 9.3版本,所以配置的路径是

/etc/postgresql/9.3/main

干杯

莱斯利

【讨论】:

    猜你喜欢
    • 2018-02-13
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    相关资源
    最近更新 更多