0

我在一台机器上有一个productionstaging环境。一个 Rails 应用程序可以全职工作。一个(实际上是相同的)rails 应用程序仅用于测试/实现新功能。

所以我使用了一个mongodb:

mongod --dbpath /path/to/my/production/rails/app/db

我还想运行一个 mongod:

mongod --dbpath /path/to/my/staging/rails/app/db

但我无法想象如何做到这一点,因为如果我按照描述的那样做,我显然会得到:

Mon Oct 14 16:12:59 [initandlisten] ERROR: listen(): bind() failed errno:98 Address already in use for socket: 0.0.0.0:27017
Mon Oct 14 16:12:59 [initandlisten] ERROR:   addr already in use

那么在一台机器上使用两个不同的 mongodb 实例以便能够分别使用生产和暂存应用程序的最佳实践是什么?

更新:

当然,最好在 rails 应用程序(例如 mongodb.yml)中定义不同的环境并使用相同的 mongod 进程和端口,但如果有可能像这样(完全独立的环境)会很有趣:

port 27017 <--> --dbpath /path/to/my/production/rails/app/db
port 27018 <--> --dbpath /path/to/my/staging/rails/app/db
4

2 回答 2

3

是的。

mongod --dbpath /path/to/my/production/rails/app/db --port 12345
mongod --dbpath /path/to/my/staging/rails/app/db --port 12346

查看这个较早的答案以获取更多信息/陷阱:Mongo DB 在同一服务器上的多个实例

于 2013-10-14T14:43:31.243 回答
0

我在相关问题中的回答略有修改:

上述答案不是运行多个实例的推荐方法(尤其是当服务器可能同时运行时),因为它会导致使用相同的配置参数,例如logpathpidfilepath在大多数情况下不是你的想。

请考虑创建专用的 mongod 配置文件,例如mongod-PROD.confmongod-STAGE.conf。在这些文件中,您可能希望提供特定于每个 mongod 实例的dbpathlogpath文件夹、bind_ipportpidfilepath,它们不会相互影响。

在这些步骤之后,您可以触发两个实例,如下所示

mongod --config <path-to>/mongod-PROD.conf
mongod --config <path-to>/mongod-STAGE.conf

您可以在 mongodb 文档页面上找到更多详细信息

于 2015-02-27T10:25:49.870 回答