2013-05-17 30 views
0

我花了两天的时间才弄到这么远。但我几乎在那里。当我运行cap deploy:cold部署失败此消息:为什么在将Rails应用程序部署到生产环境后Postgres身份验证失败?

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 

我一个我创建了名为deployer用户下运行cap deploy。我在deployer下安装了Postgres。我还创建了用户my_app在PSQL:

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

我验证了用户my_app存在运行\du。当我通过[email protected] ssh并运行命令psql时,我得到psql: FATAL: role "deployer" does not exist

我在做什么错?

回答

1

对于psql调用是因为什么轨道不相似的,它应该是:

psql -h localhost -U my_app -d my_app_production 

如果忽略这些选项,psql将采取默认:

  • 操作系统用户名作为数据库用户名
  • 作为数据库名称的OS用户名
  • 作为主机的Unix套接字目录(它与localhost和ge不同一般在pg_hba.conf有不同的身份验证规则)
0

我已经经历了与你想要经历的相同的Railscasts。我只是把我的网站与它,虽然我仍然有一些故障与帽部署。无论如何,为了清晰。

您明显在远程主机上创建了部署者用户。但是,这并不意味着“部署者”是Postgres中的用户。一旦你以[email protected]的身份登录,你必须运行sudo -u postgres psql来输入psql作为默认的postgres管理员。假设你使用的是Ubuntu,没有默认密码。

我感到困惑的地方是,如果你不能通过部署者进入远程系统,你是否在psql中创建了my_app用户?这听起来像你在本地做的(流浪者也许?),并没有远程做到这一点。正如我所说的,我认为我刚刚完成了与您正在查看的相同的内容,并且如果使用正确的密码在远程框中创建了my_app用户,它就会起作用。

+0

是的,我创建'my_app'时,我被连接到'部署者'。我还为'postgres'用户设置了一个密码。这些是db中唯一的两个用户。我认为Postgresql希望用户登录到系统:system user ='deployer',但Rails尝试以'my_app'登录。 – dee

+0

你可以把你的部署脚本?再次,我正在做同样的railscasts你是,它的工作。也许你在需要部署者的地方有my_app或什么的。 – Art

+0

我的部署脚本与Railscasts完全相同。我想到了。 my_app的密码错误。确保你能够以'my_user'登录psql:'psql -h localhost -U my_app -d my_app_production'它会询问你输入的密码。看看这个要点,它有所有的说明:https://gist.github.com/abitdodgy/5600034 – dee

相关问题