Rails: FATAL - การรับรองความถูกต้องแบบเพียร์ล้มเหลวสำหรับผู้ใช้ (PG :: Error)


143

ฉันกำลังพัฒนาบน Ubuntu 11.10 และ RubyMine

นี่คือการตั้งค่าการพัฒนาของฉันสำหรับ database.yml ซึ่ง RubyMine สร้างขึ้นสำหรับฉัน

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

เมื่อฉันพยายามเรียกใช้แอพฉันได้รับข้อผิดพลาดด้านล่างนี้ดูเหมือนว่าฉันยังไม่ได้สร้างผู้ใช้ 'โครงการ' แต่ฉันจะสร้างผู้ใช้และให้ฐานข้อมูลใน postgres ได้อย่างไร ถ้านี่เป็นปัญหาแสดงว่าอะไรคือเครื่องมือที่แนะนำให้ใช้ใน Ubuntu สำหรับงานนี้ หากนี่ไม่ใช่ปัญหากรุณาแนะนำ

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

คำตอบ:


315

หากคุณติดตั้ง postresql บนเซิร์ฟเวอร์ของคุณเพียงแค่โฮสต์: localhost ไปที่ database.yml ฉันมักจะโยนมันไปรอบ ๆ ที่มันบอกว่า pool: 5. มิฉะนั้นถ้าไม่ใช่ localhost ให้บอกแอพนั้นว่าจะหาฐานข้อมูลของมันได้ที่ไหน

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

ตรวจสอบให้แน่ใจว่ามีการตั้งค่าข้อมูลรับรองผู้ใช้อย่างถูกต้องโดยสร้างฐานข้อมูลและกำหนดความเป็นเจ้าของให้กับผู้ใช้แอปของคุณเพื่อสร้างการเชื่อมต่อ เพื่อสร้างผู้ใช้ใหม่ใน postgresql 9 run:

sudo -u postgres psql

ตั้งรหัสผ่านผู้ใช้ postgresql หากคุณยังไม่ได้มันเป็นเพียงรหัสผ่านเครื่องหมายทับขวา

postgres=# \password

สร้างผู้ใช้และรหัสผ่านใหม่และฐานข้อมูลใหม่ของผู้ใช้:

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

ตอนนี้อัปเดตไฟล์ database.yml ของคุณหลังจากที่คุณยืนยันการสร้างฐานข้อมูลผู้ใช้รหัสผ่านและตั้งค่าสิทธิ์เหล่านี้ อย่าลืมโฮสต์: localhost


2
หากคุณยังคงมีปัญหาในการเข้าสู่ระบบและทำการเชื่อมต่อผ่าน localhost ให้กลับไปที่ postgresql ผ่านเทอร์มินัลและใช้ข้อตกลง 8.2 เหล่านี้เพื่อกำหนดสิทธิ์ผู้ใช้ที่เชื่อมต่อของคุณไวยากรณ์คือ GRANT ALL ON DATABASE ไวยากรณ์นี้ทำงานบน psql 9+ เพียงเดียวกัน แต่คุณอาจจะสามารถสลับสิทธิ์ในฐานข้อมูลเป็นของผู้ใช้ก่อนที่มันจะให้ทั้งหมด: postgresql.org/docs/8.2/static/sql-grant.html
ก้ม Cardan

38
host: localhost และ pool: 5ขาดหายไปในการกำหนดค่าของฉัน หลังจากเพิ่มพวกเขาข้อผิดพลาดหายไป
Amit Patel

21
สำหรับฉันhost: localhostหายไป หลังจากที่ฉันเพิ่มนั้นทุกอย่างทำงาน นี่คือใน Ubuntu 13.04
Jesse

7
นอกจากนี้สิ่งสำคัญที่จะความเครียด: อย่าลืมอัฒภาค
Maarten

โดยส่วนตัวฉันคิดว่าเป็นสิ่งสำคัญที่จะสามารถเรียกใช้การตั้งค่าด้วย rake db: setup มิฉะนั้นคุณจะมีปัญหาในการสร้างสภาพแวดล้อมการปรับใช้ใหม่ แต่คำอธิบายนี้ใช้งานได้กับสภาพแวดล้อมการพัฒนา
Ashley Raiteri

54

วิธีนี้เป็นวิธีที่เข้าใจผิดได้มากที่สุดในการทำให้แอพ Rails ของคุณทำงานร่วมกับ postgres ในสภาพแวดล้อมการพัฒนาใน Ubuntu 13.10

1) สร้างแอพทางรถไฟด้วย postgres YAML และ 'pg' gem ใน Gemfile:

$ rails new my_application -d postgresql

2) ให้ฟังก์ชั่น CRUD หากคุณเพิ่งเห็นว่า postgres ใช้งานได้หรือไม่ให้สร้างนั่งร้าน:

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

3) ณ วันที่ rails 4.0.1-d postgresqlตัวเลือกสร้าง YAML ที่ไม่รวมพารามิเตอร์โฮสต์ ฉันพบว่าฉันต้องการสิ่งนี้ แก้ไขส่วนการพัฒนาและสร้างพารามิเตอร์ต่อไปนี้:

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

โปรดสังเกตว่าdatabaseพารามิเตอร์นั้นใช้สำหรับฐานข้อมูลที่ยังไม่ออกและusernameและและpasswordเป็นข้อมูลรับรองสำหรับบทบาทที่ไม่มีอยู่ด้วย เราจะสร้างสิ่งเหล่านี้ในภายหลัง!

นี่เป็นวิธีที่config/database.ymlควรดู (ไม่มีความละอายในการคัดลอก: 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) เริ่มต้นเชลล์ postgres ด้วยคำสั่งนี้:

$ psql

4a) คุณอาจได้รับข้อผิดพลาดนี้หากผู้ใช้ปัจจุบันของคุณ (เช่นเดียวกับผู้ใช้คอมพิวเตอร์ของคุณ) ไม่มีบทบาท postgres การบริหารที่สอดคล้องกัน

psql: FATAL:  role "your_username" does not exist

ตอนนี้ฉันเพิ่งติดตั้ง postgres เพียงครั้งเดียวดังนั้นฉันอาจผิดที่นี่ แต่ฉันคิดว่า postgres จะสร้างบทบาทการดูแลระบบโดยอัตโนมัติด้วยข้อมูลประจำตัวเดียวกับผู้ใช้ที่คุณติดตั้ง postgres

4b) หมายความว่าคุณต้องเปลี่ยนผู้ใช้ที่ติดตั้ง postgres เพื่อใช้คำสั่ง psql และเริ่มเชลล์:

$ sudo su postgres

แล้ววิ่ง

$ psql

5) คุณจะรู้ว่าคุณอยู่ในเชลล์ postgres เพราะเทอร์มินัลของคุณจะมีลักษณะดังนี้:

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

postgres=# 

6) การใช้ไวยากรณ์ PostgreSQL ขอสร้างผู้ใช้ที่เราระบุไว้ในconfig/database.yml's พัฒนาส่วน:

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

ทีนี้มีรายละเอียดปลีกย่อยอยู่ที่นี่

  • ชื่อผู้ใช้บทบาทของthisismynewusername ,ไม่ได้มีคำพูดใด ๆ ที่อยู่รอบ ๆ
  • ระบุคำสำคัญเข้าสู่ระบบหลังจากด้วยที่มีถ้าคุณทำไม่ได้บทบาทจะยังคงถูกสร้างขึ้น แต่จะไม่สามารถเข้าสู่ฐานข้อมูลได้!
  • บทบาทของรหัสผ่านthisismynewpasswordความต้องการที่จะอยู่ในราคาเดียว ไม่ใช่เครื่องหมายคำพูดคู่ไม่ได้คำพูดคู่
  • เพิ่มเครื่องหมายจุดคู่กึ่งท้าย;)

คุณควรเห็นสิ่งนี้ในเครื่องของคุณ:

postgres=#
CREATE ROLE
postgres=#

ซึ่งหมายความว่า "ROLE CREATED" แต่การแจ้งเตือนของ postgres ดูเหมือนจะนำมาใช้ในการประชุมแบบเดียวกันกับศูนย์กลาง Git

7) ตอนนี้ยังอยู่ในเชลล์ postgres เราต้องสร้างฐานข้อมูลด้วยชื่อที่เราตั้งไว้ใน YAML ทำให้ผู้ใช้ที่เราสร้างในขั้นตอนที่ 6 เป็นเจ้าของ:

postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername;

คุณจะรู้ว่าคุณประสบความสำเร็จหรือไม่เพราะคุณจะได้ผลลัพธ์:

CREATE DATABASE

8) ออกจากเปลือก postgres:

\q

9) ตอนนี้ช่วงเวลาแห่งความจริง:

$ RAILS_ENV=development rake db:migrate

หากคุณได้รับสิ่งนี้:

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

ขอแสดงความยินดี postgres ทำงานอย่างสมบูรณ์กับแอปของคุณ

9a) บนเครื่องของฉันฉันได้รับข้อผิดพลาดในการอนุญาต ฉันจำไม่ได้แน่นอน แต่มันเป็นข้อผิดพลาดตามแนวของ

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

แม้ว่าฉันจะแนะนำให้คิดอย่างรอบคอบเกี่ยวกับการตั้งค่าการเขียน privaledges ซ้ำ ๆ บนเครื่องที่ใช้งานในพื้นที่ แต่ฉันให้สิทธิ์อ่านเขียนทั้งหมดของแอพเช่นนี้:

9b) ไต่ระดับไดเรกทอรีขึ้นหนึ่งระดับ:

$ cd ..

9c) ตั้งค่าการอนุญาตของไดเรกทอรี my_application และเนื้อหาทั้งหมดเป็น 666:

$ chmod -R 0666 my_application

9d) และเรียกใช้การย้ายข้อมูลอีกครั้ง:

$ RAILS_ENV=development rake db:migrate

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

เคล็ดลับและกลเม็ดหากคุณโคลน

ลองสิ่งเหล่านี้ก่อนที่จะรีสตาร์ทขั้นตอนเหล่านี้ทั้งหมด:

ผู้ใช้ mynewusername ไม่มีสิทธิ์ในการ CRUD ไปที่ my_app_developmentฐานข้อมูลหรือไม่ ดร็อปฐานข้อมูลและสร้างอีกครั้งโดยชื่อผู้ใช้ของฉันเป็นเจ้าของ:

1) เริ่มเชลล์ postgres:

$ psql

2) วางmy_app_developmentฐานข้อมูล ระวัง! วางหมายถึงลบอย่างเต็มที่!

postgres=# DROP DATABASE my_app_development;

3) สร้างใหม่อีกครั้งmy_app_developmentและตั้งชื่อผู้ใช้ของฉันใหม่:

postgres=# CREATE DATABASE my_application_development OWNER mynewusername;

4) ออกจากเชลล์:

postgres=# \q

mynewusernameผู้ใช้ไม่สามารถเข้าสู่ระบบฐานข้อมูลหรือไม่ คิดว่าคุณเขียนรหัสผ่านผิดใน YAML และจำรหัสผ่านที่คุณป้อนโดยใช้เปลือก postgres ไม่ได้ใช่ไหม เพียงเปลี่ยนบทบาทด้วยรหัสผ่าน YAML:

1) เปิด 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) เริ่มเชลล์ postgres:

$ psql    

3) อัปเดตmynewusernameรหัสผ่าน วางรหัสผ่านและอย่าลืมใส่เครื่องหมายอัญประกาศเดี่ยว:

postgres=# ALTER ROLE mynewusername PASSWORD `musthavebeenverydrunkwheniwrotethis`;

4) ออกจากเชลล์:

postgres=# \q

กำลังพยายามเชื่อมต่อกับ localhost ผ่านโปรแกรมดูฐานข้อมูลเช่น Dbeaver และไม่ทราบว่ารหัสผ่านของผู้ใช้ postgres คืออะไร? เปลี่ยนเป็นดังนี้

1) เรียกใช้passwdเป็น superuser:

$ sudo passwd postgres

2) ป้อนรหัสผ่านบัญชีของคุณสำหรับsudo(ไม่เกี่ยวข้องกับ postgres):

[sudo] password for starkers: myaccountpassword

3) สร้าง passwod ใหม่ของบัญชี postgres:

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

รับข้อความแสดงข้อผิดพลาดนี้หรือไม่:

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) คุณต้องให้ผู้ใช้ของคุณมีความสามารถในการสร้างฐานข้อมูล จากเปลือก psql:

ALTER ROLE thisismynewusername WITH CREATEDB

1
ฉันหวังว่าฉันจะให้ +1 เพิ่มเติมแก่คุณสำหรับวิธีแก้ปัญหาที่ยอดเยี่ยมนี้ฉันจะมีความสุขมากขึ้นถ้ามันได้ผลสำหรับฉัน คำตอบที่ยอดเยี่ยมยังคง คำถามอย่างรวดเร็ว backticks เหล่านั้นรอบรหัสผ่านในการแก้ไขบทบาทหรือไม่ คุณไม่จำเป็นต้องใช้ backticks ก่อนหน้านี้ใช่ไหม?
Mike HR

@ MikeH-R ขอบคุณน่าเสียดายที่มันไม่เหมาะกับคุณ! คุณแน่ใจหรือไม่ว่า YAML ที่เกี่ยวข้องของคุณมีhost: localhost? นั่นคือ gotcha ที่แท้จริงสำหรับฉัน รอบรหัสผ่านที่คุณต้องการคำพูดเดียว บนแป้นพิมพ์ของฉันที่+shift @ด้วยเปลือก psql คุณต้องการเพียงเครื่องหมายคำพูดเดี่ยว ๆ รอบ ๆ พารามิเตอร์บางตัว คุณต้องการรหัสผ่านและไม่ใช่ชื่อของบทบาท มันมากเที่ยวยุ่งยิ่งจะซื่อสัตย์ แต่ไม่เป็นไรเมื่อคุณรู้ว่าความแตกต่างของมัน :)
starkers

@ MikeH-R ฉันปรับแต่งคำตอบเพื่อให้สิ่งที่ชัดเจนยิ่งขึ้น พิจารณาการแตกอีกครั้ง!
ตาร์เกอร์

แยกออกตอนนี้ขอบคุณอีกครั้งสำหรับคำตอบที่ยอดเยี่ยมคำตอบอื่น ๆ ส่วนใหญ่ที่ฉันพบคือความปลอดภัยคลายซึ่งเห็นได้ชัดว่าไม่ดีในการผลิต
Mike HR

29

สำหรับการแก้ปัญหาอย่างถาวร:

ปัญหาเกิดขึ้นกับ pg_hba ของคุณ สายนี้:

local   all             postgres                                peer

ควรจะเป็น

local   all             postgres                                md5

จากนั้นรีสตาร์ทเซิร์ฟเวอร์ postgresql ของคุณหลังจากเปลี่ยนไฟล์นี้

ถ้าคุณอยู่บน Linux คำสั่งจะเป็น

sudo service postgresql restart

1
ขอบคุณ! นี่คือคำตอบที่แท้จริง
skplunkerin

9

ฉันประสบปัญหาเดียวกันในเครื่อง Ubuntu ดังนั้นฉันจึงลบข้อผิดพลาดนี้โดยทำตามขั้นตอนบางอย่าง สลับไปที่ผู้ใช้ postgres

$ sudo su - postgres

มันจะถามรหัสผ่านและรหัสผ่านเริ่มต้นคือ postgres

หลังจากสลับผู้ใช้เป็น postgres ให้เปิดคอนโซล psql

$ psql

ดังนั้นตรวจสอบรุ่น postgres ว่ามีหลายรุ่นหรือไม่

psql=# select VERSION();

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

ตอนนี้เปิด postgres user

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

9.1 เป็นรุ่นส่งคืนคำสั่งบน

และแทนที่

local   all             postgres                                peer

ถึง

local   all             postgres                                md5

เริ่มบริการใหม่

sudo service postgresql restart

ฉันเขียนขั้นตอนในบล็อกของฉันด้วย

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


คุณได้รับคำตอบที่ถูกต้องพลาดเพียงสิ่งเดียวที่คุณไม่จำเป็นต้องตรวจสอบรุ่น คุณสามารถเปลี่ยนรหัสผ่านโดยใช้คำสั่งนี้หลังจาก psql Alter ผู้ใช้ "ชื่อผู้ใช้" ตั้งรหัสผ่าน 'xyz';
vishu

โปรดจำไว้ว่าการmd5รับรองความถูกต้องต้องใช้รหัสผ่านที่ไม่เป็นโมฆะสำหรับผู้ใช้ฐานข้อมูลของคุณ (ขอเพียงเล็กน้อยวันนี้ในขณะที่พยายามเพิ่มความขี้เกียจให้สูงสุดเมื่อสร้างแอปพลิเคชัน aa Rails)
Mark Leighton Fisher

5

คุณสามารถไปที่ไฟล์ /var/lib/pgsql/data/pg_hba.conf ของคุณและเพิ่มความไว้วางใจแทน Ident It ได้ผลสำหรับฉัน

local   all all trust
host    all 127.0.0.1/32    trust

สำหรับรายละเอียดเพิ่มเติมดูที่ปัญหานี้การ พิสูจน์ตัวตนของผู้ใช้ล้มเหลวสำหรับผู้ใช้


Centos 6.6 ลอง:/var/lib/pgsql/9.2/data/pg_hba.conf
แพทริค

4

การเพิ่มhost: localhostคือความมหัศจรรย์สำหรับฉัน

development:
  adapter: postgresql
  database: database_name_here
  host: localhost
  username: user_name_here

0

หากคุณได้รับข้อความแสดงข้อผิดพลาด ( Peer authentication failed for user (PG::Error)) เมื่อเรียกใช้การทดสอบหน่วยตรวจสอบให้แน่ใจว่ามีฐานข้อมูลการทดสอบอยู่


0

ฉันยังต้องเผชิญกับปัญหาเดียวกันนี้ในขณะที่ทำงานในสภาพแวดล้อมการพัฒนาของฉันปัญหาคือว่าฉันทิ้งhost: localhostความเห็นในconfig/database.ymlไฟล์

ดังนั้นแอปพลิเคชันของฉันไม่สามารถเชื่อมต่อกับฐานข้อมูล PostgreSQL เพียงแค่ไม่แสดงความคิดเห็นก็แก้ปัญหาได้

development:
  <<: *default
  database: database_name

  username: database_username 

  password: database_password

  host: localhost

นั่นคือทั้งหมดที่

ฉันหวังว่านี่จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.