【问题标题】:Postgresql error, "no pg_hba.conf entry"Postgresql 错误,“没有 pg_hba.conf 条目”
【发布时间】:2018-08-11 16:00:27
【问题描述】:

我是编程新手。我正在构建一个 Rails 应用程序,现在想将其推送到 Heroku。我关注 Heroku's guidelines 将我的数据库从 sqlite 3 转换为 postresql。之后,当我尝试迁移甚至在本地主机上签出我的应用程序时出现此错误

“PG::ConnectionBad: FATAL: no pg_hba.conf entry for host "[local]", user "keemtaker", database "tuma_database_development", SSL off"

我查看了以前对同一问题的答案,但它对我来说是如此的困惑和不知所措。如果我能获得解决此错误的分步指南,那就太好了。我以前使用过 PostgreSQL,没有任何问题。这就是我的 gemfile 的样子

    source 'https://rubygems.org'
ruby '2.3.4'

gem 'figaro'
gem 'jbuilder', '~> 2.0'
gem 'puma'
gem 'rails', '5.1.4'
gem 'redis'
gem 'cloudinary'
gem 'carrierwave', '~> 1.2'
gem 'rails_admin', '~> 1.2'
gem 'pg'

gem 'autoprefixer-rails'
gem 'bootstrap-sass'
gem 'jquery-rails'
gem 'font-awesome-sass'
gem 'sass-rails'
gem 'simple_form'
gem 'turbolinks', '~> 5.0.0'
gem 'coffee-rails'

gem 'uglifier'
gem 'webpacker'
gem 'devise'
gem 'ransack'
gem 'trix'


gem "letter_opener", group: :development


group :development do
  gem 'web-console', '>= 3.3.0'
end

group :development, :test do
  # gem 'binding_of_caller'
  # gem 'better_errors'

  gem 'pry-byebug'
  gem 'pry-rails'
  gem 'listen', '~> 3.0.5'
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

在我的 database.yml 中,我有

    default: &default
  adapter: postgresql
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  <<: *default
  database: tuma_database_development

test:
  <<: *default
  database: tuma_database_test

production:
  <<: *default
  database: tuma_database_production

【问题讨论】:

    标签: ruby-on-rails ruby postgresql heroku


    【解决方案1】:

    根据Heroku Support,这不是来自您的 Rails 应用程序的错误,而是来自恶意尝试对您的 PostgreSQL 数据库进行身份验证的人:

    问题

    我在 Heroku Postgres 中看到连接尝试失败 日志,但我没有创建这些连接,它们来自 IP 我不认识的地址。看起来有人可能正在尝试 破解我的数据库:

    sql_error_code = 28000 FATAL: no pg_hba.conf entry for host "122.180.247.11", user "postgres", database "postgres", SSL off

    上述错误的变体可能包括将user 设置为 rootadmintest 或其他默认用户名。

    分辨率

    这些错误表明登录尝试失败 你的数据库,这意味着连接没有建立。

    failed connection attempts 使用默认值是很常见的 用户名(例如user "postgres", database "postgres")。在上 公共互联网意味着一定程度的未经授权的访问尝试 可能的。这些都是非常简单的尝试,通常涉及 尝试像rootpsqltestpostgres 这样的组合。然而, Heroku Postgres 用户名、密码和数据库名称组合 是随机生成的,因此这些通用访问尝试是徒劳的。

    sql_error_code=28000 的另一个常见原因,尤其是当它 涉及“不支持的前端协议”消息是使用 nmap 之类的工具。 Read more about the "unsupported frontend protocol" message.

    Heroku 非常重视安全性并努力工作以确保 您的数据的安全。此外,信任是一个核心原则 salesforce.com 和 Heroku。这是对客户隐私的承诺 并激发信任,指导我们每天做出的决定 基础。信任是每一位员工的责任 我们认真对待。

    【讨论】:

      【解决方案2】:

      您需要为 Heroku 指定数据库 URL,因为您无权访问其基础架构上的本地数据库。将database.ymlproduction 部分替换为:

      production:
        url: <%= ENV["DATABASE_URL"] %>
        pool: 15
      

      所以你完整的database.yml 应该是这样的:

      default: &default
        adapter: postgresql
        encoding: unicode
        pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
        timeout: 5000
      
      development:
        <<: *default
        database: tuma_database_development
      
      test:
        <<: *default
        database: tuma_database_test
      
      production:
        <<: *default
        url: <%= ENV["DATABASE_URL"] %>
      

      来源:Getting started with Rails on Heroku

      【讨论】:

      • 如果我错了请纠正我,你甚至不需要那个 url 行吗?
      • 嗯,双重检查,不,不需要,事情可以保持简单edgeguides.rubyonrails.org/…If you have an empty config/database.yml file but your ENV['DATABASE_URL'] is present, then Rails will connect to the database via your environment variable
      • 这很有趣,不知道。无论如何,在应用程序配置中显式比依赖隐式配置更好。
      • 是的,我认为从这个我可以同意的声明(不能依赖隐式配置),这是一个没有太多宣传的设置;但不是那么新(我像 2/3 年前一样使用 heroku)
      • 解决方案无效。主要问题是,我什至无法运行 rails db:migrate 甚至无法将我的应用程序连接到本地主机。完整错误为“ FATAL: no pg_hba.conf entry for host "[local]", user "keemtaker", database "postgres", SSL off" 。无法为 {"adapter"=>"postgresql", "encoding"=>"unicode", "pool"=>5, "database"=>"tuma_development"} 创建数据库
      【解决方案3】:

      通过此配置,您的应用将查找本地数据库,而在 heroku 上,您没有该数据库

      但是see here the config they're advising

      1. 添加 postgres 插件
      2. 将您的生产配置行替换为上面链接中显示的行

      当您安装插件时,heroku 将在您的项目中添加一个 DATABASE_URL 环境变量。 Rails 会自动寻找并选择这个变量 (see here)

      【讨论】:

      • 解决方案无效。主要问题是,我什至无法运行 rails db:migrate 甚至无法将我的应用程序连接到 localhost。完整错误为“ FATAL: no pg_hba.conf entry for host "[local]", user "keemtaker", database "postgres", SSL off" 。无法为 {"adapter"=>"postgresql", "encoding"=>"unicode", "pool"=>5, "database"=>"tuma_development"} 创建数据库
      • 查看您的日志,它显示“本地”,这意味着您的 database.yml 生产设置仍在寻找本地数据库。换句话说,它配置错误。如前所述,您需要安装 为您的 heroku 应用程序安装的 postgres 插件,如果没有,请删除 行。它非常简单,一旦完成,事情就会奏效。如果安装后,请仔细检查您的应用配置,单击“显示环境变量”,您将看到 DATABASE_URL 条目
      • 了解 DATABASE_URL 将完全接管,postgres 插件将完成所有工作,默认情况下您无法命名数据库。我认为这是通过阅读我发送给您的链接暗示的,甚至不要保留database: tuma_database_production
      • 我还以为您会了解 databse.yml 的工作方式,这意味着您可以配置它以适应环境。所以请理解您需要保留您拥有的开发和测试部分;只改变生产线。阅读我之前发送的整章;那些东西是超级基础的,你需要了解edgeguides.rubyonrails.org/…
      • @HakeemBaba 还不行吗?
      猜你喜欢
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 2016-04-12
      • 1970-01-01
      • 2020-09-15
      • 2010-11-27
      相关资源
      最近更新 更多