我正在遵循Heroku的node.js tutorial来配置Postgres数据库。 创建简单表并连接到localhost:5000 / db后,出现错误消息“错误:服务器不支持SSL连接”。
我一直在寻找解决方案达数小时之久,但似乎无法解决。对你的帮助表示感谢。谢谢!
答案 0 :(得分:5)
在这里,我提供了此问题的解决方法,而不是本文的标题。从总体上看,更好的答案可能是解决为本地计算机配置SSL。
我来到这里的目的是解决完成问题中提到的Heroku教程并设置Postgres数据库以在本地和远程工作的问题。
const pool = new Pool({
connectionString: process.env.DATABASE_URL || 'postgresql://postgres:<your admin password>@localhost:5432/<your db name>',
ssl: process.env.DATABASE_URL ? true : false
})
我的想法是在部署的应用程序上使用SSL,但在本地计算机上完全避开SSL。通过简单地跳过本地计算机上的SSL配置,我可以集中精力开发仍然使用Heroku内置SSL的可运行应用程序。
我使用Heroku环境变量来检测它们相对于我自己的环境,并在上面的代码示例中相应地选择值。对我来说,这在本地和远程都有效。
答案 1 :(得分:1)
我在完成教程后设置本地环境时遇到了同样的问题。坚持使用命令 heroku local
来启动我的服务器为我修复了它。本教程的 Run the app locally 部分详细介绍了此命令。
就我而言,我使用 React + Webpack 添加了一个 Express 服务器和一个客户端。我用于本地开发的 package.json
脚本如下所示:
"dev": "run-p dev:*",
"dev:server": "heroku local -f Procfile.dev",
"dev:webpack": "webpack --watch --config webpack.dev.js --mode development",
run-p
只是来自 npm-run-all
以同时运行所有以 dev
开头的脚本。heroku local
命令和特定的 Procfile
进行本地开发(使用 -f
标志执行此操作),我使用 nodemon
在本地启动服务器以注意变化(请参阅下面的 Procfile.dev
)。Procfile.dev
用于本地开发:
web: nodemon index.js
Procfile
用于生产:
web: node --optimize_for_size --max_old_space_size=920 --gc_interval=100 index.js
然后用于从 Provision a database 部分连接到数据库的相同代码适用于我:
const { Pool } = require('pg');
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false
}
});
答案 2 :(得分:1)
这是 Heroku 今天在 2021 年使用的新形式,他们在连接中做了一些小的更正。
const pool = (() => {
if (process.env.NODE_ENV !== 'production') {
return new Pool({
connectionString: process.env.DATABASE_URL,
ssl: false
});
} else {
return new Pool({
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false
}
});
} })();
它们发生了一些变化,使用这种方式您可以保持本地和 Heroku 可用。
答案 3 :(得分:0)
此SSL问题与Heroku无关,但与Postgresql有关。如果您不想处理它,我建议像示例中那样使用ssl:false。
pip list | grep tensorflow
tensorflow 1.14.0
tensorflow-estimator 1.14.0
tensorflow-gpu 1.14.0
警告
Heroku并未在初始文档中确切说明如何使用 DATABASE_URL 。因此,您必须按照以下步骤在与 index.js 相同的目录中编辑 .env 文件。
const pool=new Pool({
connectionString:process.env.DATABASE_URL,
ssl:false
})
在尝试删除不可忘记的内容时,
DATABASE_URL='postgres://username:password@localhost:5432/postgres'