我在一台计算机上有production
和staging
个环境。一个rails应用程序全天候工作。一个(实际上是相同的)rails应用程序仅用于测试/实现新功能。
所以我使用mongodb:
mongod --dbpath /path/to/my/production/rails/app/db
我还想用:
运行一个mongodmongod --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进程和端口,但如果有可能这样的事情(完全独立的环境)会很有趣:< / p>
port 27017 <--> --dbpath /path/to/my/production/rails/app/db
port 27018 <--> --dbpath /path/to/my/staging/rails/app/db
答案 0 :(得分:2)
是。
mongod --dbpath /path/to/my/production/rails/app/db --port 12345
mongod --dbpath /path/to/my/staging/rails/app/db --port 12346
查看此前面的答案,了解更多信息/陷阱:multiple instances of Mongo DB on same server
答案 1 :(得分:0)
我在相关问题中的答案略有修改版本:
上述answer不是推荐的运行多个实例的方法(特别是当服务器可能同时运行时),因为它会导致使用相同的配置参数,例如 logpath 和 pidfilepath 在大多数情况下不是你想要的。
请考虑创建专用的mongod配置文件,如 mongod-PROD.conf 和 mongod-STAGE.conf 。在这些文件中,您可能需要提供 dbpath , logpath 文件夹, bind_ip ,端口和 pidfilepath < / em>特定于每个mongod实例,并且不会相互影响。
完成这些步骤后,您可以按如下方式触发两个实例
mongod --config <path-to>/mongod-PROD.conf
mongod --config <path-to>/mongod-STAGE.conf
您可以在mongodb docs page
中找到更多详细信息