将流星部署到官方流星服务器光纤

Posted

技术标签:

【中文标题】将流星部署到官方流星服务器光纤【英文标题】:Deploy meteor to official meteor servers fibers 【发布时间】:2013-10-04 21:43:34 【问题描述】:

这里已经有一些与此问题相关的问题。

我想在官方的流星服务器上部署一个 meteorjs 应用程序。我的应用程序使用纤程,并且由于纤程是为我的系统 (Mac OSX) 编译的,它会在 ubuntu 服务器上由流星创建一个错误。

其他问题/答案与在官方流星服务器以外的其他地方部署应用程序有关,或者他们似乎留下了一步,因为它们不适合我。

其中一些相关帖子如下:

Reinstalling node-fibers for a Meteor app on Modulus.io?

Problems with Meteor deployment related to fibers module

我想使用:

meteor deploy myapp.meteor.com

编辑:

不幸的是,我上面的问题并不完整,我使用的是 Future,它是 Fiber 的一部分。当我将它部署到流星并访问服务器日志时,我收到这些警告,然后应用程序立即崩溃。

警告 /meteor/dev_bundles/0.3.13/lib/node_modules/fibers/future.js:173

警告错误:找不到模块“纤维/未来”

在我的代码中,我有一行:

Future = Npm.require("fibers/future");

这在meteor deploy XXX.meteor.com 上不可能吗?

编辑第二: 而不是使用:

Future = Npm.require("fibers/future");

我也试过了:

var path = Npm.require('path');
var fs = Npm.require('fs');
var base = path.resolve('.');
var isBundle = fs.existsSync(base + '/bundle');
var modulePath = base + (isBundle ? '/bundle/static' : '/public') + '/node_modules';
Future = Npm.require(modulePath + '/fibers/future');

正如这篇文章中所建议的:

How can I deploy node modules in a Meteor app on meteor.com?

并将光纤安装到:

.meteor/local/build/programs/server/public/node_modules/

但是有了这个,我在没有 sudo 的情况下运行流星时会得到这个 错误:EACCES,权限被拒绝'XXXX/.meteor/local/build' 在 Object.fs.renameSync (fs.js:439:18)

或者这个错误,当使用 sudo 运行它时: 错误:找不到模块 'XXXX/.meteor/local/build/programs/server/public/node_modules/fibers/future'

通常我在没有 sudo ofc 的情况下运行流星!

【问题讨论】:

【参考方案1】:

我的问题是我确实包含了用于加载另一个框架的 npm 包,这破坏了新的 Npm 由流星。

【讨论】:

【参考方案2】:

您只需按照文档中的说明卸载光纤并将其重新安装到您的服务器上:

cd bundle/programs/server/node_modules
rm -r fibers
npm install fibers@1.0.1

其中 bundle 目录是您通过 meteor bundle xxx.tar.gz 在您的 ubuntu 服务器上创建的捆绑应用程序的解压缩版本

【讨论】:

不适用于我的问题,因为当我直接部署到流星服务器时,我从来没有捆绑文件夹。谢谢你的时间! 哦,我明白了,我想我知道你想做什么。我认为纤维/未来在流星部署托管上“正常工作”而无需二进制文件。您是否考虑过wrapAsync 在最终确定时会与更多官方实施保持一致?见eventedmind.com/posts/meteor-meteor-wrapasync【参考方案3】:

从meteor documentation 可以看出,您可以使用“meteor deploy”部署到meteor.com,或者使用“meteor bundle”创建一个捆绑包到您自己的服务器。

只有在创建捆绑包时才需要安装“fibers”。如果您使用“meteor deploy”,则无需。

只有在你想像这样部署时才需要删除和重新安装光纤包的部分

在您的开发机器上创建捆绑包 将 bundle.tgz 文件复制到运行不同操作系统的服务器上 解压 bundle.tgz 文件并运行应用程序

在创建捆绑包时,无论如何您都必须安装光纤。如果您在服务器上完成所有操作,步骤如下:

流星包--release 0.6.5.1 /my/output.tgz tar -xvzf /my/output.tgz mv bundle your-app-name cd your-app-name/programs/server npm 安装光纤 foreverstart your-app-name/main.js

这些步骤假设您使用节点包forever

【讨论】:

感谢您的回答!不幸的是,使用流星部署时出现错误,我认为这与其他相关问题中的问题相同 在较早的帖子中,他们使用较旧的流星版本。在运行 npm install fiber 之前,您是否更改了 yourapp/programs/server 的路径? 我不确定您指的是哪个“较早的帖子”,但我在我的问题中添加了第二次编辑,内容涉及您可能涉及的内容。 我认为你的错误不在于未来与流星的使用。您提到的第一个语法“Future = Npm.require("fibers/future")”与对我有用的语法相同。查看本教程以了解 Meteor 中的未来:eventedmind.com/posts/nodejs-using-futures 感谢 Gorb 博士的帮助。事实证明,问题出在其他地方。我包含了npm包,它破坏了meteor自带的npm

以上是关于将流星部署到官方流星服务器光纤的主要内容,如果未能解决你的问题,请参考以下文章

哪个Linux操作系统最适合将流星应用程序部署到侦听端口80的域?

最佳流星主持人和详细信息

2015年如何部署生产流星服务器?

在我自己的服务器上部署流星

将简单的服务器端 JS 文件添加到流星

将流星部署到 android-device 时找不到 Build Tools 修订版 24.0.1