Rails: FATAL - Peer authentication failed for user (PG::Error)

Uruchamiam mój rozwój na Ubuntu 11.10 i RubyMine

Oto moje ustawienia programistyczne dla bazy danych.yml: który RubyMine stworzył dla mnie

development:
  adapter: postgresql
  encoding: unicode
  database: mydb_development
  pool: 5
  username: myuser
  password:

Kiedy próbuję uruchomić aplikację, dostaję ten błąd poniżej, wydaje się, że nie utworzyłem jeszcze użytkownika "projektu", ale jak mogę utworzyć użytkownika i przyznać mu bazę danych w postgres ? jeśli to jest problem, to jakie jest zalecane narzędzie do tego zadania w Ubuntu ? jeśli to nie jest problem, to proszę Rada.

Exiting
/home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `initialize': FATAL:  Peer authentication failed for user "project" (PG::Error)
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `new'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `connect'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:329:in `initialize'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `new'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `postgresql_connection'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:303:in `new_connection'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:313:in `checkout_new_connection'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:237:in `block (2 levels) in checkout'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:232:in `loop'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:232:in `block in checkout'
    from /home/sam/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:229:in `checkout'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:95:in `connection'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:398:in `retrieve_connection'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:168:in `retrieve_connection'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:142:in `connection'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/model_schema.rb:308:in `clear_cache!'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/railtie.rb:91:in `block (2 levels) in <class:Railtie>'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:418:in `_run__757346023__prepare__404863399__callbacks'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:405:in `__run_callback'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:385:in `_run_prepare_callbacks'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:81:in `run_callbacks'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/actionpack-3.2.3/lib/action_dispatch/middleware/reloader.rb:74:in `prepare!'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/actionpack-3.2.3/lib/action_dispatch/middleware/reloader.rb:48:in `prepare!'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/application/finisher.rb:47:in `block in <module:Finisher>'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `instance_exec'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `run'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:55:in `block in run_initializers'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `each'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `run_initializers'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/application.rb:136:in `initialize!'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/railtie/configurable.rb:30:in `method_missing'
    from /home/sam/RubymineProjects/project/config/environment.rb:5:in `<top (required)>'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `require'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `block in require'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:236:in `load_dependency'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `require'
    from /home/sam/RubymineProjects/project/config.ru:4:in `block in <main>'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:51:in `instance_eval'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:51:in `initialize'
    from /home/sam/RubymineProjects/project/config.ru:1:in `new'
    from /home/sam/RubymineProjects/project/config.ru:1:in `<main>'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:40:in `eval'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:40:in `parse_file'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:200:in `app'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands/server.rb:46:in `app'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:301:in `wrapped_app'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:252:in `start'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands/server.rb:70:in `start'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands.rb:55:in `block in <top (required)>'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands.rb:50:in `tap'
    from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands.rb:50:in `<top (required)>'
    from /home/sam/RubymineProjects/project/script/rails:6:in `require'
    from /home/sam/RubymineProjects/project/script/rails:6:in `<top (required)>'
    from -e:1:in `load'
    from -e:1:in `<main>'

Process finished with exit code 1
Author: Promise Preston, 2012-04-03

8 answers

Jeśli zainstalowałeś postresql na swoim serwerze, wystarczy host: localhost do bazy danych.yml, Zwykle wrzucam tam gdzie jest napisane: 5. W przeciwnym razie, jeśli nie jest to localhost, zdecydowanie powiedz tej aplikacji, gdzie znaleźć jego bazę danych.

development:
  adapter: postgresql
  encoding: unicode
  database: kickrstack_development
  host: localhost
  pool: 5
  username: kickrstack
  password: secret

Upewnij się, że poświadczenia użytkownika są ustawione poprawnie, tworząc bazę danych i przypisując własność użytkownikowi aplikacji w celu nawiązania połączenia. Aby utworzyć nowego Użytkownika w postgresql 9 Uruchom:

sudo -u postgres psql

Ustaw hasło użytkownika postgresql jeśli nie, to tylko ukośnik.

postgres=# \password

Utwórz nowego użytkownika i hasło oraz nową bazę danych użytkownika:

postgres=# create user "guy_on_stackoverflow" with password 'keepitonthedl';
postgres=# create database "dcaclab_development" owner "guy_on_stackoverflow"; 

Teraz zaktualizuj swoją bazę danych.plik yml po potwierdzeniu utworzenia bazy danych, użytkownika, hasła i ustawieniu tych uprawnień. Nie zapomnij host: localhost.

 324
Author: Bent Cardan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-28 14:54:42

Jest to najbardziej niezawodny sposób, aby Twoja aplikacja rails działała z postgres w środowisko programistyczne W Ubuntu 13.10.

1) Utwórz aplikację rails z Postgres YAML i klejnotem ' pg ' w Gemfile:]}
$ rails new my_application -d postgresql

2) Daj mu trochę funkcji CRUD. Jeśli tylko widzisz, czy postgres działa, Utwórz rusztowanie: [52]}

$ rails g scaffold cats name:string age:integer colour:string

3) od rails 4.0.1 opcja -d postgresql generuje YAML, który nie zawiera parametru host. uznałem, że tego potrzebuję. Edytuj sekcję rozwoju i utwórz następujące parametry:

encoding: UTF-8
host: localhost
database: my_application_development
username: thisismynewusername
password: thisismynewpassword 

Uwaga parametr database jest dla bazy danych, która jeszcze nie kończy się, a username i password są poświadczeniami dla roli, która również nie istnieje. Stworzymy je później!

Tak powinno wyglądać config/database.yml (nie wstyd w copypastingu :D ):

development:
  adapter: postgresql
  pool: 5
  # these are our new parameters
  encoding: UTF-8
  database: my_application_development
  host: localhost
  username: thisismynewusername
  password: thisismynewpassword

test:
  # this won't work 
  adapter: postgresql
  encoding: unicode
  database: my_application_test
  pool: 5
  username: my_application
  password:

production:
  # this won't work 
  adapter: postgresql
  encoding: unicode
  database: my_application_production
  pool: 5
  username: my_application
  password:

4) Uruchom powłokę postgres poleceniem:

$ psql

4a) może wystąpić ten błąd, jeśli obecny użytkownik (jak w komputerze użytkownik) nie ma odpowiedniej roli administratora postgres.

psql: FATAL:  role "your_username" does not exist

Teraz zainstalowałem postgres tylko raz, więc mogę się mylić, ale myślę, że postgres automatycznie tworzy rolę administracyjną z tymi samymi poświadczeniami, co użytkownik, jako którego zainstalowałeś postgres.

4B) oznacza to, że musisz zmienić użytkownika, który zainstalował postgres, aby użyć polecenia psql i uruchomić powłokę:

$ sudo su postgres

And then run

$ psql

5) będziesz wiedział, że jesteś w postgres shell ponieważ twój terminal będzie wyglądał tak:

$ psql
psql (9.1.10)
Type "help" for help.

postgres=# 

6) używając składni postgresql, stwórzmy użytkownika określonego w sekcji config/database.yml'Sdevelopment:

postgres=# CREATE ROLE thisismynewusername WITH LOGIN PASSWORD 'thisismynewpassword';

Jest tu trochę subtelności, więc przejdźmy do nich.

  • nazwa użytkownika roli, thisismynewusername, nie ma wokół niego cudzysłowów
  • Określ słowo kluczoweLOGIN po Z . Jeśli nie, rola nadal zostanie utworzony, ale nie będzie można zalogować się do bazy danych!
  • hasło roli, thisismynewpassword , musi być w pojedynczych cudzysłowach. Nie podwójne cudzysłowy .
  • Dodaj dwukropek na końcu;)

Powinieneś zobaczyć to w swoim terminalu:

postgres=#
CREATE ROLE
postgres=#

Oznacza to "ROLE CREATED", ale alerty postgresa wydają się przyjmować te same imperatywne konwencje git hub.

7) teraz, jeszcze w powłoce postgres, musimy stworzyć baza danych z nazwą, którą ustawiliśmy w YAML. Aby użytkownik, który stworzyliśmy w kroku 6, stał się jego właścicielem]}

postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername;

Dowiesz się, czy ci się udało, ponieważ otrzymasz wynik:

CREATE DATABASE

8) Zamknij powłokę postgres:

\q

9) Teraz chwila prawdy:

$ RAILS_ENV=development rake db:migrate

If you get this:

==  CreateCats: migrating =================================================
-- create_table(:cats)
   -> 0.0028s
==  CreateCats: migrated (0.0028s) ========================================

Gratulacje, postgres doskonale współpracuje z Twoją aplikacją.

9a) na mojej lokalnej maszynie, ciągle dostawałem błąd uprawnień. I nie pamiętam dokładnie, ale to był błąd w linii

Can't access the files. Change permissions to 666.

Chociaż radzę bardzo dokładnie przemyśleć rekurencyjne ustawianie write privaledges na maszynie produkcyjnej, lokalnie dałem całej aplikacji uprawnienia do odczytu zapisu w taki sposób:

9b) wspiąć się na jeden poziom katalogu:

$ cd ..

9c) Ustaw uprawnienia katalogu my_application i całej jego zawartości na 666:

$ chmod -R 0666 my_application

9d) i uruchomić migrację znowu:

$ RAILS_ENV=development rake db:migrate

==  CreateCats: migrating =================================================
-- create_table(:cats)
   -> 0.0028s
==  CreateCats: migrated (0.0028s) ========================================

Kilka porad i trików, jeśli się sypać

Wypróbuj je przed ponownym uruchomieniem wszystkich tych kroków:

Użytkownik mynewusername nie ma uprawnień do CRUD do bazy danych my_app_development? Upuść bazę danych i utwórz ją ponownie z mynewusername jako właścicielem:

1) Uruchom powłokę postgres:

$ psql

2) upuść bazę danych my_app_development. Ostrożnie! Drop oznacza całkowite usunięcie!

postgres=# DROP DATABASE my_app_development;

3) odtworzyć inny my_app_development i zrobić mynewusername the owner:

postgres=# CREATE DATABASE my_application_development OWNER mynewusername;

4) Wyjdź z powłoki:

postgres=# \q

Użytkownik mynewusername nie może zalogować się do bazy danych? Myślisz, że napisałeś złe hasło w YAML i nie pamiętasz hasła, które wpisałeś używając powłoki postgres? Po prostu zmień rolę za pomocą hasła YAML:

1) Otwórz YAML i skopiuj hasło do schowka:]}
 development:
      adapter: postgresql
      pool: 5
      # these are our new parameters
      encoding: UTF-8
      database: my_application_development
      host: localhost
      username: thisismynewusername
      password: musthavebeenverydrunkwheniwrotethis

2) Uruchom powłokę postgres:

$ psql    

3) zaktualizuj hasło mynewusername. Wklej w hasło i pamiętaj, aby umieścić pojedyncze cudzysłowy wokół niego:

postgres=# ALTER ROLE mynewusername PASSWORD `musthavebeenverydrunkwheniwrotethis`;

4) Wyjdź z powłoki:

postgres=# \q

Próbujesz połączyć się z localhost za pomocą przeglądarki baz danych, takiej jak Dbeaver, i nie wiesz, jakie jest hasło użytkownika postgres? Zmień to tak:

1) Uruchom passwd jako superużytkownik:

$ sudo passwd postgres

2) Wprowadź hasło do konta dla sudo (nie ma to nic wspólnego z postgresem):

[sudo] password for starkers: myaccountpassword

3) Utwórz nowe konto postgres passwod:

Enter new UNIX password: databasesarefun
Retype new UNIX password: databasesarefun
passwd: password updated successfully

Otrzymujesz ten Komunikat o błędzie?:

Run `$ bin/rake db:create db:migrate` to create your database
$ rake db:create db:migrate
PG::InsufficientPrivilege: ERROR:  permission denied to create database

4) musisz dać użytkownikowi możliwość tworzenia baz danych. Z powłoki psql:

ALTER ROLE thisismynewusername WITH CREATEDB
 55
Author: Starkers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-16 22:27:39

Dla trwałego rozwiązania:

Problem jest z Twoim pg_hba. Ten wiersz:

local   all             postgres                                peer

Powinno być

local   all             postgres                                md5

Następnie uruchom ponownie serwer postgresql po zmianie tego pliku.

Jeśli korzystasz z Linuksa, polecenie to

sudo service postgresql restart
 31
Author: Sumit Munot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-07 05:36:39

Miałem ten sam problem na Ubuntu machine, więc usunąłem ten błąd, wykonując kilka kroków. Przełącz na użytkownika postgres

$ sudo su - postgres

Zapyta o hasło i domyślnie hasło to postgres

Po przełączeniu użytkownika na postgres, otwórz konsolę psql

$ psql

Więc sprawdź wersję postgres, jeśli dostępnych jest wiele wersji

psql=# select VERSION();

PostgreSQL 9.1.13 on x86_64-unk....         # so version is 9.1

Teraz Otwórz postgres user

vim /etc/postgresql/9.1/main/pg_hba.conf

9.1 is version return form upper command

I replace

local   all             postgres                                peer

Do

local   all             postgres                                md5

Uruchom ponownie usługę

sudo service postgresql restart

Piszę kroki na moim blogu również

Http://tarungarg402.blogspot.in/2014/10/set-up-postgresql-on-ubuntu.html

 9
Author: Tarun Garg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-18 13:00:14

Możesz przejść do swojego /var/lib/pgsql/data/pg_hba.plik conf i dodaj zaufanie w miejsce Ident U mnie zadziałało.

local   all all trust
host    all 127.0.0.1/32    trust

Aby uzyskać więcej informacji, zapoznaj się z tym zagadnieniem uwierzytelnianie Ident nie powiodło się dla użytkownika

 5
Author: Rastee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-20 06:00:50

Dodawanie host: localhost było dla mnie magią

development:
  adapter: postgresql
  database: database_name_here
  host: localhost
  username: user_name_here
 4
Author: ispirett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-18 13:01:53

Jeśli podczas uruchamiania testów jednostkowych pojawi się komunikat o błędzie (Peer authentication failed for user (PG::Error)), upewnij się, że baza danych testów istnieje.

 0
Author: David Winiecki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-27 21:45:58

Miałem również do czynienia z tym samym problemem podczas pracy w moim środowisku programistycznym, problem polegał na tym, że zostawiłem host: localhost skomentowany w pliku config/database.yml.

Więc moja aplikacja nie mogła połączyć się z bazą danych PostgreSQL, po prostu skomentowanie go rozwiązało problem.

development:
  <<: *default
  database: database_name

  username: database_username 

  password: database_password

  host: localhost
To wszystko.

Mam nadzieję, że to pomoże

 0
Author: Promise Preston,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-02 18:41:33