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
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.
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:
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
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
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
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
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
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.
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
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