[英]Rails/PostgreSQL problem: PG::ConnectionBad: fe_sendauth: no password supplied
[英]Rails: fe_sendauth: no password supplied (PG::ConnectionBad) from Ruby, but ok in Rails
我在從直接紅寶石評估 postgres 數據庫時遇到問題。
我使用 Rails 創建了一個 Postgres 數據庫
>rails new www --database=postgresql
使用 Rails 4.2.5 和 Postgres 是 9.4
它生成以下config/database.yml文件。
default: &default
adapter: postgresql
encoding: unicode
pool: 5
development:
<<: *default
database: www_development
test:
<<: *default
database: www_test
production:
<<: *default
database: www_production
username: www
password: <%= ENV['WWW_DATABASE_PASSWORD'] %>
我可以運行 rails server、db:drop、db:create 和 db:migrate。
我也可以使用 psql 訪問數據庫
>psql www_development
但是,當我從非 Rails 項目目錄運行以下app.rb時,我收到fe_sendauth: no password supplied (PG::ConnectionBad)錯誤消息。
這顯然不是 Rails 的問題。 我要么在我的 ruby 中遺漏了一些東西,要么 Postgres 需要一個星期來處理 Rails 和純 Ruby 之間的一些差異 [我不知道]。 我還包含了 Postgres 的pg_hba.conf文件。
不知所措,試圖弄清楚這一點。 任何幫助將非常感激。
應用.rb
require 'yaml'
require 'active_record'
require 'pg'
ActiveRecord::Base.establish_connection(
adapter: 'postgresql',
host: 'localhost',
database: 'www_development',
)
/etc/postgresql/9.4/main/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
local all postgres peer
local all all peer
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
您既沒有在ActiveRecord::Base.establish_connection(
中指定用戶名,也沒有指定密碼。我假設您想為SUPERUSER
數據庫使用一些沒有密碼的www_development
- 對嗎?
根據文檔對等身份驗證
從操作系統獲取客戶端的操作系統用戶名,檢查是否與請求的數據庫用戶名匹配。
這就是為什么如果你可以在沒有密碼的情況下使用psql
,那么你應該能夠在沒有密碼的情況下使用相同的操作系統用戶和環境運行app.rb
如果你不能,然后app.rb
嘗試連接不同的用戶名左右......
選項:
將username: postgres
放入ActiveRecord::Base.establish_connection(
將local all all peer
更改為local all all trust
使用 ENV 變量作為密碼很可能變量本身不存在。 使用printenv
確認存在。 例如,在將變量包含在/etc/environment
文件中后,您需要重新登錄/重啟才能訪問該變量。 如果這可行,它可能比更改pg_hba.conf
更好。
development:
<<: *default
database: postgres
username: postgres
password: postgres
# must specify the right DB, superuser and superuser Password as per postgreSQL setup
這對我有用,這是我需要做的唯一改變。 (好的,我用 12.1 重新安裝了 pgsql)
我在設置 Rails 6 應用程序時遇到了同樣的問題。
問題是,當使用rails server
並嘗試從瀏覽器查看應用程序時,出現以下錯誤:
ActiveRecord::ConnectionNotEstablished
fe_sendauth: no password supplied
這是我解決它的方法:
問題是由於我沒有指定/提供應用程序使用的數據庫密碼引起的,因此當應用程序嘗試連接到config/database.yml
中指定的數據庫時,它會遇到該錯誤。
我通過在config/database.yml
中指定應用程序的數據庫密碼解決了這個問題:
# The password associated with the postgres role (username).
password: my-password
此外,如果您尚未使用以下方法創建數據庫,請確保您已為應用程序創建了數據庫:
rails db:create
之后我重新啟動了 rails 服務器:
rails server
這次當我嘗試從瀏覽器查看應用程序時,它運行良好。
就這樣。
我希望這有幫助
我正在嘗試使用不應該要求輸入密碼的對等身份驗證。
對我來說,問題是我在 database.yml 中指定了 localhost,這樣就迫使數據庫驅動程序嘗試建立不同類型的連接(例如,tcp、命名管道等)
從我的配置中刪除“主機:'localhost'”行根據其他答案為我解決了這個問題: ActiveRecord connection to a localhost postgresql database in trust mode
請注意,在我的例子中,我使用的是“對等”方法而不是“信任”方法,但解決方案是相同的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.