我是编程新手。我正在构建一个rails应用程序,现在想将其推送到Heroku。我遵循了 Heroku 的指南将我的数据库从 sqlite 3 转换为 postresql。这样做之后,当我尝试迁移甚至在本地主机上签出我的应用程序时,我会收到此错误
"PG::ConnectionBad: FATAL: 没有主机"[local]"的 pg_hba.conf 条目,用户"keemtaker",数据库"tuma_database_development",SSL 关闭"
我查看了同一问题的先前答案,但这对我来说是如此令人困惑和不知所措。如果我能获得解决此错误的分步指南,那就太好了。我以前使用过PostgreSQL,没有任何问题。这就是我的宝石文件的样子
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
在我的数据库中,我有
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
根据Heroku支持,这不是来自您的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
设置为root
、admin
、test
或其他默认用户名。分辨率
这些错误表示登录尝试失败 您的数据库,这意味着未建立连接。
通常会看到使用默认值的失败连接尝试 用户名(如
user "postgres", database "postgres"
)。在 公共互联网意味着某种程度的未经授权的访问尝试是 可能。这些是非常简单的尝试,通常涉及 尝试组合,如root
、psql
、test
和postgres
。然而 Heroku Postgres 用户名、密码和数据库名称组合 是随机生成的,使这些泛型访问尝试徒劳无功。
sql_error_code=28000
的另一个常见原因,特别是当它 涉及"不支持的前端协议"消息是使用 像这样的工具nmap
.阅读有关"不支持的前端协议"的更多信息 消息。Heroku认真对待安全,并努力工作以确保 您的数据安全。此外,信任是 salesforce.com 和希罗库。这是对客户隐私的承诺 并激发信任,指导我们每天做出的决定 基础。信任是每一位员工的责任,也是每个人的责任。 我们认真对待。
通过此配置,您的应用程序将查找本地数据库,而在 heroku 上,您没有该数据库
但是在这里看到他们建议的配置:
- 添加帖子附加组件
- 将您的生产配置线替换为上面链接中显示的 生产线
当你安装插件时,heroku 会在你的项目上添加一个DATABASE_URL环境变量。Rails将自动查找并选择此变量(请参阅此处)
您需要为 Heroku 指定数据库 URL,因为您无权访问其基础架构上的本地数据库。将database.yml
的production
部分替换为以下内容:
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"] %>
来源:Heroku 上的 Rails 入门