"meteor"与"meteor bundle"在生产环境中的区别

17

为什么在生产环境中应该“捆绑” Meteor 应用程序而不只是将源代码复制到服务器上并使用“meteor”命令?

基本上,以下哪些方面存在差异:

  • 使用“meteor bundle app.tar.gz”捆绑应用程序,然后安装正确版本的 fibers 和 nodejs,并提取存档文件,使用“node main.js”启动应用程序。

  • 将项目源代码复制到服务器上并直接编写“meteor”以启动应用程序?


1
我无法确定答案,但当我面临这个决定时,我注意到一个问题:在服务器上运行meteor使用的CPU周期比启动bundle(node.js)要多得多。Meteor花费的CPU时间似乎也与项目(反应式)目录中的文件数量成正比。因此,我的怀疑是Meteor会继续监视更改的目录,而运行的bundle则不会。此外,值得一提的是,我在使用meteor --production时遇到了稳定性问题,但在使用bundle时没有(尽管我还升级了node.js)。 - Christian Fritz
2个回答

16

这不是一个详尽的列表,但以下是 meteor 命令执行的一些操作:

  1. 创建本地数据库
  2. 监视应用或包中的每个依赖文件
  3. 单独发送每个未压缩的文件到客户端(如果您是在本地开发,这很低效)

相比之下,打包应用程序:

  1. 不会创建本地数据库
  2. 不会消耗 CPU 监视文件的更改
  3. 创建两个压缩文件(js 和 css),非常适合放在 CDN 上或从反向代理托管。这些文件对于客户端下载也很有效,并且高度可缓存。

总的来说,如果您使用一组好的脚本,部署应该不会是件大事。


1
如果你运行 "meteor run --production" 命令,你的文件将被压缩,我不确定但我认为在这种模式下热代码重载也会被禁用。 - Rebolon
1
不,热推送重载在生产模式下也是启用的。它有助于在生产中软更新客户端,确保其始终处于最新版本。 - imslavko
4
如果你的应用程序用户不是很多,可以承受观察过程的 CPU 负担(此外,如果支持的话,观察操作是由操作系统执行的,而非轮询),那么 meteor run --production 似乎与打包没有太大区别。 - Andrew Mao

1
使用 bundle 时:
  1. 它不会生成 meteor-mongo(meteor 中的 mongodb)
  2. 没有热重载
  3. Meteor 不会监视您的文件。
  4. 您可以离开/退出服务器,而不必关闭应用程序。
  5. 您可以使用 pm2 或其他类似的 npm 包平滑地管理节点进程。
  6. 您可以决定将 mongoDB 放在哪里,并决定使用什么端口。
  7. 您可以通过不运行 meteor 应用程序来远程连接到您的 mongodb。
在使用副本或在项目目录中运行 meteor 命令时:
  1. 如果不使用屏幕复用器(例如 tmux),则无法在保持项目运行的同时离开/退出服务器
  2. 您只能使用 meteor 分配的 mongodb,该 mongodb 在 localhost:3001 上生成 - 如果 meteor 使用端口 3000。
  3. 您让 Meteor 监视文件更改,这会使用 CPU。
  4. 当您的应用程序崩溃时,您的数据库也会崩溃。 :)

1
如果你使用以下命令:<br />*set MONGO_URL=mongodb://localhost:27017/<your mongodb name>*,你可以将你的mongo db托管在meteor之外。你的mongo数据库将独立于你的应用程序之外,如果你关闭你的应用程序,你的数据库仍然完好无损可用。 - Manuel Rivera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接