Strongloop Heroku Postgres 设置 SSL 错误

Strongloop Heroku Postgres setup SSL error

我是 Node.js 世界的新手,并且已经使用 StrongLoop 在 Heroku(免费)上设置了一个应用程序 运行。我设置了 heroku postgresql 插件(免费层),并尝试将数据源添加到 StrongLoop 的 arc composer UI。 UI 更新 server/datasources.json。当我尝试连接到我的数据源时,出现此错误:

no pg_hba.conf entry for host "X.X.X.X", user "myUser", database "mydb", SSL off

我知道问题一定出在在 postgres 上设置 SSL。最接近的 StrongLoop 文档并没有完全讨论这个问题:https://strongloop.com/strongblog/postgresql-node-js-apis-loopback-connector/ ... Because I'm using StrongLoop rather than just straight Node.js, Heroku's documentation also left me lacking https://devcenter.heroku.com/articles/heroku-postgresql#connecting-in-node-js。我很困惑我需要从这里做什么。

我有相当简单的新闻源类型 JSON 数据,我用手柄操作。因此,如果使用免费层有问题,我愿意接受其他关于我的设置的免费建议。感谢您的帮助。

编辑,datasources.json:

{"db":{"name":"db","connector":"memory"},
"mydb":{
"host":"myhost",
"port":####,
"url":"myamazonawsurl:####/mydbname",
"database":"mydbname",
"password":"mypw",
"name":"mydatasourcename",
"ssl":true,
"user":"myuser",
"connector":"postgresql"}}

更多错误详情:

error: no pg_hba.conf entry for host "X.X.X.X", user "myuser", database "mydb", SSL off at 
Connection.parseE (c:\myroot\node_modules\loopback-connector-postgresql\node_modules\pg\lib\connection.js:539:11) at 
Connection.parseMessage (c:\myroot\node_modules\loopback-connector-postgresql\node_modules\pg\lib\connection.js:366:17) at 
Socket.<anonymous> (c:\myroot\node_modules\loopback-connector-postgresql\node_modules\pg\lib\connection.js:105:22) at 
Socket.emit (events.js:107:17) at readableAddChunk (_stream_readable.js:163:16) at 
Socket.Readable.push (_stream_readable.js:126:10)

根据您链接的文章,您需要修改 datasources.json 配置以适应您的 Heroku 环境。

heroku pg:credentials DATABASE_URL 获取您的详细信息,这将吐出以下内容(当然没有我使用的占位符!):

postgres://user:password@ec2-host.compute-1.amazonaws.com:5432/your-db-name

将其粘贴到 datasources.json:

  "accountDB": {
     "connector": "postgresql",
     "url": "postgres://user:password@ec2-host.compute-1.amazonaws.com:5432/your-db-name?sslmode=require"
  }

环回的 PostgreSQL 文档提供了一些进一步的细节 - http://docs.strongloop.com/display/public/LB/PostgreSQL+connector - 但以上内容应该可以帮助您入门。

通过在命令行中设置以下环境变量,要求 Postgres 连接使用 SSL:

$ export PGSSLMODE=require

应该是“?ssl=true”而不是“?sslmode=require”

"devpostgresql": {
    "url": "postgres://user:password@ec2-54-228-226-93.eu-west-1.compute.amazonaws.com:5432/dbname?ssl=true",
    "name": "devpostgresql",
    "connector": "postgresql"
  }

我自己 运行 遇到了类似的问题,我找到了这个解决方案来解决它。类似于@Lieblingsfarbe 的回答,但这是在 Heroku CLI 中。

进入 Heroku CLI -> 你的应用程序目录 -> 发出这个命令:

heroku config:set PGSSLMODE=require

参考:经过几个小时的尝试和研究后在这里找到它 ()

我尝试了以上所有选项,但在我的例子中,我使用了错误的 postgresql 驱动程序。

在检查了我的 postgresql 版本 10.4 之后,我不得不使用下面的 gradle 配置:

compile group: 'org.postgresql', name: 'postgresql', version: '42.2.5'