每当我加入时,我的Meteor应用程序都会崩溃

时间:2014-11-10 23:12:23

标签: meteor

从Meteor 0.8.3升级到Meteor 1.0(并迁移所有必需的软件包)后,我的应用程序将无法正常启动。它只是在启动后不久崩溃并出现错误:

I20141110-23:58:20.541(1)? Exception in queued task: Error: ENOENT, open '../web.browser/head.html'
I20141110-23:58:20.541(1)?     at Object.Future.wait (/home/leo/.meteor/packages/meteor-tool/.1.0.35.ftql1v++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/dev_bundle/lib/node_modules/fibers/future.js:326:15)
I20141110-23:58:20.541(1)?     at _.extend.runTask (packages/meteor/fiber_helpers.js:79)
I20141110-23:58:20.542(1)?     at Object.WebAppInternals.generateBoilerplate (packages/webapp/webapp_server.js:588)
I20141110-23:58:20.542(1)?     at updateVersions (packages/autoupdate/autoupdate_server.js:89)
I20141110-23:58:20.542(1)?     at Object.task (packages/autoupdate/autoupdate_server.js:183)
I20141110-23:58:20.542(1)?     at _.extend._run (packages/meteor/fiber_helpers.js:145)
I20141110-23:58:20.542(1)?     at packages/meteor/fiber_helpers.js:123
I20141110-23:58:20.543(1)?     - - - - -
I20141110-23:58:20.543(1)?     at Object.Future.wait (/home/leo/.meteor/packages/meteor-tool/.1.0.35.ftql1v++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/dev_bundle/lib/node_modules/fibers/future.js:326:15)
I20141110-23:58:20.543(1)?     at packages/meteor/helpers.js:118
I20141110-23:58:20.543(1)?     at readUtf8FileSync (packages/boilerplate-generator/boilerplate-generator.js:6)
I20141110-23:58:20.543(1)?     at packages/boilerplate-generator/boilerplate-generator.js:81
I20141110-23:58:20.544(1)?     at Array.forEach (native)
I20141110-23:58:20.544(1)?     at Function._.each._.forEach (packages/underscore/underscore.js:105)
I20141110-23:58:20.544(1)?     at Boilerplate._generateBoilerplateFromManifestAndSource (packages/boilerplate-generator/boilerplate-generator.js:63)
I20141110-23:58:20.545(1)?     at new Boilerplate (packages/boilerplate-generator/boilerplate-generator.js:16)
I20141110-23:58:20.545(1)?     at Object.WebAppInternals.generateBoilerplateInstance (packages/webapp/webapp_server.js:329)
I20141110-23:58:20.545(1)?     at packages/webapp/webapp_server.js:591
I20141110-23:58:20.546(1)?     - - - - -

所以,显然它抱怨无法访问../web.browser/head.html

但是,.meteor/local/build/programs/web.browser/head.html 确实存在且包含<head>的正文:

<meta charset="utf-8">
...
<link rel="stylesheet" href="apps.css">

<head>中的client/main.html相同。

如果我删除了<head>元素或将其设为空,.meteor/local/build/programs/web.browser/head.html将会消失,将会崩溃。但是,我确实需要<head>,因为它包含一些必要的标签和样式表。

此问题与<head>的内容无关,因为即使<meta charset="utf-8">也会导致崩溃。只要存在非空<head>元素,它就会崩溃。也就是说,每当有一个.meteor/local/build/programs/web.browser/head.html文件时,Meteor说缺少这个文件,具有讽刺意味。

head.html的权限似乎是正确的:-r - r - r--,它允许每个人读取文件。每次Meteor“构建应用程序”时,文件创建日期也会发生变化。

到目前为止,我知道Meteor 0.9或更新版本会出现此问题。在迁移之前,该应用程序在0.8.3下运行良好。

我还试过了一个测试项目(meteor create test)并且<head>工作了。即使在不同的HTML客户端文件中有多个<head>也可以工作,这让我相信这是一个因迁移我的项目而引起的奇怪问题。

使用与破损项目相同的软件包,无法在另一个测试项目中重现。

有什么想法吗?我已经尝试过调试,但调试Meteor的代码对我来说太复杂了。

1 个答案:

答案 0 :(得分:1)

经过几个小时的调试,我找到了罪魁祸首。

我有一个服务器端脚本(在服务器/中)使用shelljscd到另一个目录。

虽然这在Meteor 0.8下运行良好,但似乎Meteor 0.9的变化使cd进入其他目录是不可能的,因为它会破坏Meteor的内部组件。

虽然它不完全是一个Meteor错误,但它会破坏兼容性并且在发行说明中没有提及......但是,我想使用cd不是可以的在大多数项目中都可以找到。

这也解释了为什么Meteor只会在<head>时抱怨。当没有<head>时,它不会尝试读取文件,所以一切都很好。但是,当有一个时,它将尝试读取文件并失败,因为当前目录与Meteor期望的目录不同。

因此,如果您在使用Me shelljs时遇到奇怪的问题,请确保您使用cd