簡體   English   中英

Rails:fe_sendauth:Ruby 未提供密碼 (PG::ConnectionBad),但在 Rails 中正常

[英]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嘗試連接不同的用戶名左右......

選項:

  1. username: postgres放入ActiveRecord::Base.establish_connection(

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM