- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
预测这个问题:我是否需要在 Heroku 上获得 SSL 支持,以便使用 SSL 在 Heroku 和 Atlas MongoDB Cloud 之间建立连接? (TSL/SSL 连接是 requirement,用于访问 Atlas MongoDB Cloud 服务)。
我正在尝试将用 node.js 编写的 Heroku 应用程序连接到 Atlas MongoDB Cloud 托管的集群。
我当前的数据库托管在 mLab(作为 Heroku 插件),用于通过 mongoose 访问集群的 MongoDB URI 是(使用 xxx 省略 secret 信息):
MONGODB_URI="mongodb://xxx:xxx@xxx-a0.mlab.com:23266,xxx-a1.mlab.com:xxx/xxx?replicaSet=rs-xxx"
现在我已将数据从 mLab 迁移到 Atlas MongoDB Cloud,我当前正在使用 URI 访问集群:
MONGODB_URI="mongodb://xxx:xxx@cluster0-shard-xxx.mongodb.net:xxx,cluster0-shard-xxx.mongodb.net:xxx,cluster0-shard-xxx.mongodb.net:xxx/xxx?replicaSet=xxx&ssl=true&authSource=admin"
当在我的机器上本地运行 Heroku 应用程序时,我可以毫无问题地访问数据库。我还可以使用 mongo shell 连接到集群。
但是在Heroku中运行App时,无法建立连接。在浏览器 JS 控制台中,我收到 503 服务不可用消息。在heroku中,我收到错误:
no primary found in replica set
我知道 Atlas MongoDB Cloud 需要 SSL 连接,与 mLab 不同。在我的本地计算机中,我认为正在使用自签名证书来成功连接到集群。
我的问题是:我是否需要在 Heroku 中获得 SSL 支持才能访问并在 Heroku 和 MongoDB Atlas 之间建立安全连接?或者 Heroku 中的 SSL 支持仅需要客户端/Heroku 安全连接?
最佳答案
免责声明:我既没有使用过 Heroku,也没有使用过 MongoDB Atlas,但我正在研究它们。
根据to a Github issue I found ,如果您尚未将服务器 IP 地址列入 MongoDB Atlas 中的白名单,您将收到该错误消息。
阅读MongoDB Atlas docs ,我认为与 Heroku dynos 结合使用的唯一方法是将 0.0.0.0/0
(即所有地址)添加到 MongoDB Atlas 白名单中。
尝试一下,然后请报告您是否可以实例化连接。
尝试回答 SSL 问题,根据我读到的内容,我认为您不需要在 Heroku 上启用它,尽管我不完全确定。
如果 MongoDB 服务器执行证书验证,则用于连接到它的 Node.js 代码必须如下所示(取自 Node.js driver documentation ):
var MongoClient = require('mongodb').MongoClient,
f = require('util').format,
fs = require('fs');
// Read the certificates
var ca = [fs.readFileSync(__dirname + "/ssl/ca.pem")];
var cert = fs.readFileSync(__dirname + "/ssl/client.pem");
var key = fs.readFileSync(__dirname + "/ssl/client.pem");
// Connect validating the returned certificates from the server
MongoClient.connect("mongodb://localhost:27017/test?ssl=true", {
server: {
sslValidate:true
, sslCA:ca
, sslKey:key
, sslCert:cert
, sslPass:'10gen'
}
}, function(err, db) {
db.close();
});
如果 MongoDB 服务器不检查任何 SSL 证书,您可以简单地使用如下代码(也取自 Node.js driver documentation ):
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/test?ssl=true", function(err, db) {
db.close();
});
鉴于Atlas documentation包含以下用于从 Node.js 连接到它的示例代码,我认为您不必在 Heroku 上启用 SSL:
var MongoClient = require('mongodb').MongoClient;
var uri = "mongodb://kay:myRealPassword@mycluster0-shard-00-00-wpeiv.mongodb.net:27017,mycluster0-shard-00-01-wpeiv.mongodb.net:27017,mycluster0-shard-00-02-wpeiv.mongodb.net:27017/admin?ssl=true&replicaSet=Mycluster0-shard-0&authSource=admin";
MongoClient.connect(uri, function(err, db) {
db.close();
});
<小时/>
关于node.js - 将 Heroku 应用程序连接到 Atlas MongoDB 云服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55773394/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!