3

我在从纯红宝石评估 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 provided (PG::ConnectionBad)错误消息。

这显然不是 Rails 问题。我要么在我的 ruby​​ 中遗漏了一些东西,要么 Postgres 需要一个 tweek 来处理 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
4

4 回答 4

1

使用 ENV 变量作为密码,变量本身很可能不存在。用 确认存在printenv/etc/environment例如,在将变量包含在文件中之后,您需要重新登录/重新启动才能访问该变量。如果这行得通,它可能比改变pg_hba.conf.

于 2017-05-17T12:07:22.917 回答
0

您既没有指定用户名,也没有在ActiveRecord::Base.establish_connection(. 我假设您想使用一些SUPERUSER没有密码的www_development数据库 - 对吧?

根据文档 对等身份验证

从操作系统获取客户端的操作系统用户名,检查是否与请求的数据库用户名匹配。

这就是为什么如果你可以psql没有密码,你应该能够在没有密码的情况下app.rb 使用相同的操作系统用户和环境运行。如果不能,则app.rb尝试使用不同的用户名进行连接...

选项:

  1. 放在username: postgres_ActiveRecord::Base.establish_connection(

  2. 更改local all all peerlocal all all trust

于 2015-12-22T05:58:39.453 回答
0
development:
  <<: *default
  database: postgres
  username: postgres
  password: postgres
  # must specify the right DB, superuser and superuser Password as per postgreSQL setup

This worked for me, the only changes I needed to make. (ok fine i re-installed pgsql with 12.1)

于 2021-03-17T17:50:09.980 回答
0

在设置 Rails 6 应用程序时,我遇到了同样的问题。

问题是,当使用 启动 rails 服务器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

这次当我尝试从浏览器查看应用程序时,它运行良好。

就这样。

我希望这有帮助

于 2021-02-14T12:39:06.523 回答