将Rails应用程序部署到生产环境后,为什么Postgres身份验证失败?

时间:2013-05-17 03:16:50

标签: ruby-on-rails ruby postgresql deployment

我花了两天时间才走到这一步。但我快到了。当我运行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下安装了Postgres。我还在psql中创建了用户my_app

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

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

我做错了什么?

2 个答案:

答案 0 :(得分:1)

要使psql调用与rails类似,它应该是:

psql -h localhost -U my_app -d my_app_production

如果省略这些选项,默认情况下会psql

  • OS用户名作为数据库用户名
  • OS用户名作为数据库名称
  • 作为主机的Unix套接字目录(与localhost不同,通常在pg_hba.conf中有不同的身份验证规则)

答案 1 :(得分:0)

我已经完成了你想要的Railscasts。我只是把我的网站搞定了,虽然我仍然有一些帽子部署的故障。无论如何,为了清楚起见。

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

我感到困惑的是,如果你不能使用部署者进入远程系统,你是否在psql中创建了my_app用户?这几乎听起来像你在本地这样做(Vagrant可能?)并没有远程做到这一点。正如我所说的,我想我刚刚完成了你正在查看的相同内容,如果在远程盒子上使用正确的密码创建了my_app用户,它就可以正常工作。