0

我花了两天时间才走到这一步。但我快到了。当我运行cap deploy:cold部署失败并显示以下消息:

servers: ["xxx"]
    [xxx] executing command
 ** [out :: xxx] rake aborted!
 ** [out :: xxx] FATAL:  password authentication failed for user "my_app"

我的database.yaml有这个:

production:
  adapter: postgresql
  encoding: utf8
  database: my_app_production
  pool: 5
  host: localhost
  username: my_app
  password: secret

我在cap deploy我创建的名为deployer. 我在deployer. 我还在my_apppsql 中创建了用户:

create user my_app with password 'secret';
create database my_app_production owner my_app;

我通过运行验证了用户my_app存在\du。当我通过 sshdeployer@xxx并运行命令时psql,我得到psql: FATAL: role "deployer" does not exist.

我究竟做错了什么?

4

2 回答 2

1

为了使psql调用类似于 rails 所做的调用,它应该是:

psql -h localhost -U my_app -d my_app_production

如果省略这些选项,psql将默认采用:

  • 操作系统用户名作为数据库用户名
  • 操作系统用户名作为数据库名称
  • 作为主机的 Unix 套接字目录(与 localhost 不同,通常在 中具有不同的身份验证规则pg_hba.conf
于 2013-05-17T12:43:56.053 回答
0

我认为我已经经历了与您正在经历的相同的 Railscasts。我刚刚建立了我的网站,尽管在 cap deploy 上我仍然遇到了一些小故障。无论如何,为了清楚起见。

您显然在远程主机上创建了一个部署者用户。但是,这并不意味着“部署者”是 Postgres 中的用户。一旦你 ssh 作为 deployer@xxx.xxx.xxx.xxx 你必须运行 sudo -u postgres psql 来输入 psql 作为默认的 postgres 管理员。假设您使用的是 Ubuntu,则没有默认密码。

我感到困惑的是,如果您无法使用部署程序进入远程系统,您是否在那里在 psql 中创建了 my_app 用户?听起来您几乎是在本地执行此操作(也许是 Vagrant?)并且没有远程执行此操作。正如我所说,我想我刚刚完成了您正在查看的相同内容,并且如果 my_app 用户是在具有正确密码的远程框上创建的,则它可以工作。

于 2013-05-17T05:08:01.573 回答