Search code examples
ruby-on-railsrubydatabasepostgresqlrole

FATAL: Peer authentication failed for user "rails"


I'm trying to run rake db:create with postgresql on a DigitalOcean server.

However, it's returning the error Peer authentication failed for user "rails", referring to config/database.yml where the credentials to log in are stored

What's strange is that these are the exact credentials displayed to me in plain text when I log into the server through SSH. I've tried both <%= ENV['APP_DATABASE_PASSWORD'] %> and the password displayed to me in plain text and the same thing happens.

The environment is in production, which I have to enforce manually because the app is in development on startup and forcing it to change in config/environments.rb isn't working.

If I had to guess I might say that something funny is happening with the environment, because DigitalOcean will continue to serve a cached version of the site until the server is restarted and it might still think it's in development as far as it's concerned. But I'm in kind of a catch-22 until I figure out how to force it into production on startup.

This question is what I've arrived at after a lot of tribulation with postgres and trying to set up a database on the backend, so I need to be walked through a couple things.

Many thanks.


Solution

  • The problem is with your pg_hba.conf file. Which you can find in /etc/postgresql/9.3/main/pg_hba.conf. Here 9.3 is postgres version, you can change with your postgres version. More detail about authentication is here.

    You have code something like :

    # TYPE  DATABASE        USER    ADDRESS             METHOD
    
    # "local" is for Unix domain socket connections only
    local    all             all                        peer
    

    You can either change it to md5 or trust.

    # TYPE  DATABASE        USER    ADDRESS             METHOD
    
    # "local" is for Unix domain socket connections only
    local    all             all                        trust
    

    It will fix your problem.

    Note : To edit pg_hba.conf file you should have sudo permission on server.