" meteor run --production"使用MONGO_URL与捆绑

时间:2015-01-31 20:00:22

标签: node.js meteor docker

也许我的问题是this的重复,但我觉得它增加了一些细节,使它有些不同。

我目前有一个Meteor Docker设置,基于节点:0.10图像,首先捆绑应用程序并运行“node main.js”作为其CMD。该映像还安装Meteor并使用其命令来引导环境并安装必要的软件包。

如果不是使用node:0.10,我可以使用更小的Linux映像并简单地安装curl / git / meteor,这对我来说会大大简化。删除构建步骤将进一步简化事情,因为根据我的理解,“meteor build”无法构建移动应用程序,如果它们已配置但不需要(即如果我通常构建Android / IOS应用程序,我不能轻易如果我只想要一个包,构建它们。此外,我的开发环境已经使用了MONGO_URL和一个容器化的MongoDB实例,因此在开发时我甚至都没有使用本地数据库。

那么,“meteor run --production”与一组MONGO_URL和“node main.js”之间有什么区别?一个实例中发生了什么,而另一个实例中却没有?

特别是,“meteor run --production”是否检测到MONGO_URL的存在并且没有启动一个单独的,未使用的mongod?我清楚地看到MONGO_URL指向的数据库中的数据,但我不确定meteor命令是否会旋转一个单独的数据,并且会浪费CPU周期/ RAM。基于上一个问题,我收集它仍然会轮询文件系统以进行更改。但是这只是在Linux下使用inotify吗?假设这是一个相当小的性能影响我是否正确?

我想,如果我需要从服务器中获得每一盎司的性能,那么捆绑就是最佳选择。但是,如果使用MONGO_URL设置运行“meteor run --production”只会导致轻微的性能损失,同时大大简化了我的设置,那么我可能有必要简化我的Dockerfiles并更加统一我的开发/生产设置。

感谢。

2 个答案:

答案 0 :(得分:5)

需要注意的一点是meteor run --production ...表示"在模拟生产的开发环境中运行"而不是"这就是你应该如何在生产中运行你的应用程序"。

当你运行上述命令时,process.env.NODE_ENV设置为development

https://github.com/meteor/meteor/issues/180#issuecomment-30043150

答案 1 :(得分:1)

任何meteor命令都使用MONGO_URL指定的数据库,并且仅使用该数据库。我在运行meteor test-packages时经常将MONGO_URL指向一个空字符串,以避免在程序包不执行任何与数据库相关的操作时启动Mongo实例的开销。为了安心,您可以通过在另一个终端中运行htop并查看没有创建mongo进程来仔细检查。

关于meteor run --production监视文件系统的更改,是的,这是一个小的CPU开销。 htop可以帮忙。

  

“meteor build”无法构建移动应用程序,如果它们已配置但不需要(即如果我通常构建Android / IOS应用程序,如果我只想要一个包,我就不能轻易地构建它们)< / p>

在预构建步骤中,如果您不需要移动设备,则可以轻松替换.meteor /平台,只说server\nbrowser(删除androidios行)平台。

捆绑然后运行node main.js的一个好处是,您可以使用pm2(better alternative to forever)来保持应用程序运行而不是崩溃。不过,另请参阅Meteor Up