从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的代码对我来说太复杂了。
答案 0 :(得分:1)
经过几个小时的调试,我找到了罪魁祸首。
我有一个服务器端脚本(在服务器/中)使用shelljs
到cd
到另一个目录。
虽然这在Meteor 0.8下运行良好,但似乎Meteor 0.9的变化使cd
进入其他目录是不可能的,因为它会破坏Meteor的内部组件。
虽然它不完全是一个Meteor错误,但它会破坏兼容性并且在发行说明中没有提及......但是,我想使用cd
不是可以的在大多数项目中都可以找到。
这也解释了为什么Meteor只会在<head>
时抱怨。当没有<head>
时,它不会尝试读取文件,所以一切都很好。但是,当有一个时,它将尝试读取文件并失败,因为当前目录与Meteor期望的目录不同。
因此,如果您在使用Me shelljs
时遇到奇怪的问题,请确保您使用cd
。