在定期作业中从另一个应用程序导入 Foxx 在 Windows 7 上引发错误

Foxx import from another app in a periodic job throws error on Windows 7

我已经在 Windows 7、64 位上安装了 ArangoDB 2.7.3。

我有一个用例,其中一个 Foxx 应用程序 A 在存储库中公开了一些我想在另一个 Foxx 应用程序 B 中使用的功能,这样我就不必复制该特定功能。应用程序 B 实际上启动了一个定期触发的作业,它调用了 A 的导出功能。问题是作业偶尔会抛出一个错误,它没有找到导出的模块..但过了一会儿它恢复了。

我已经在Github上添加了两个应用程序:https://github.com/mphoenixo/arangodb.git

有没有人遇到过这种情况?我已经使用 ArangoDB 的文档构建了应用程序,但也许我仍然遗漏了一些东西。

错误的堆栈跟踪如下:

    2016-02-02T15:48:56Z [7380] ERROR TypeError: Cannot read property 'repo' of undefined
2016-02-02T15:48:56Z [7380] ERROR   at d:/install/ArangoDB 2.7.3/var/lib/arangodb-apps/_db/DataPushLandingZone/foxx-import-app-example/APP/scripts/myJob.js:3:25
2016-02-02T15:48:56Z [7380] ERROR   at [object Object].Module.run (D:\install\ArangoDB 2.7.3\bin\../share/arangodb/js/common/bootstrap/modules.js:1420:10)
2016-02-02T15:48:56Z [7380] ERROR   at ArangoApp.loadAppScript (d:/install/ArangoDB 2.7.3/share/arangodb/js/server/modules/org/arangodb/foxx/arangoApp.js:458:24)
2016-02-02T15:48:56Z [7380] ERROR   at executeAppScript (d:/install/ArangoDB 2.7.3/share/arangodb/js/server/modules/org/arangodb/foxx/manager.js:510:18)
2016-02-02T15:48:56Z [7380] ERROR   at Object.runScript (d:/install/ArangoDB 2.7.3/share/arangodb/js/server/modules/org/arangodb/foxx/manager.js:814:10)
2016-02-02T15:48:56Z [7380] ERROR   at Object.exports.work (d:/install/ArangoDB 2.7.3/share/arangodb/js/server/modules/org/arangodb/foxx/queues/worker.js:118:8)
2016-02-02T15:48:56Z [7380] ERROR   at eval (<anonymous>:6:60)
2016-02-02T15:48:56Z [7380] ERROR   at eval (<anonymous>:9:15)
2016-02-02T15:48:56Z [7380] ERROR   at eval (<anonymous>:9:27)
2016-02-02T15:48:56Z [7380] ERROR 
2016-02-02T15:48:56Z [7380] ERROR Running script "MyJob" not possible for mount "/foxx-import-app-example":
2016-02-02T15:48:56Z [7380] ERROR TypeError: Cannot read property 'repo' of undefined
2016-02-02T15:48:56Z [7380] ERROR   at d:/install/ArangoDB 2.7.3/var/lib/arangodb-apps/_db/DataPushLandingZone/foxx-import-app-example/APP/scripts/myJob.js:3:25
2016-02-02T15:48:56Z [7380] ERROR   at [object Object].Module.run (D:\install\ArangoDB 2.7.3\bin\../share/arangodb/js/common/bootstrap/modules.js:1420:10)
2016-02-02T15:48:56Z [7380] ERROR   at ArangoApp.loadAppScript (d:/install/ArangoDB 2.7.3/share/arangodb/js/server/modules/org/arangodb/foxx/arangoApp.js:458:24)
2016-02-02T15:48:56Z [7380] ERROR   at executeAppScript (d:/install/ArangoDB 2.7.3/share/arangodb/js/server/modules/org/arangodb/foxx/manager.js:510:18)
2016-02-02T15:48:56Z [7380] ERROR   at Object.runScript (d:/install/ArangoDB 2.7.3/share/arangodb/js/server/modules/org/arangodb/foxx/manager.js:814:10)
2016-02-02T15:48:56Z [7380] ERROR   at Object.exports.work (d:/install/ArangoDB 2.7.3/share/arangodb/js/server/modules/org/arangodb/foxx/queues/worker.js:118:8)
2016-02-02T15:48:56Z [7380] ERROR   at eval (<anonymous>:6:60)
2016-02-02T15:48:56Z [7380] ERROR   at eval (<anonymous>:9:15)
2016-02-02T15:48:56Z [7380] ERROR   at eval (<anonymous>:9:27)
2016-02-02T15:48:56Z [7380] ERROR 
2016-02-02T15:48:56Z [7380] ERROR Job 47455086883 failed:
2016-02-02T15:48:56Z [7380] ERROR [ArangoError 3103: failed to invoke module
2016-02-02T15:48:56Z [7380] ERROR File: d:/install/ArangoDB 2.7.3/var/lib/arangodb-apps/_db/DataPushLandingZone/foxx-import-app-example/APP/scripts/myJob.js]
2016-02-02T15:48:56Z [7380] ERROR   at [object Object].Module.run (D:\install\ArangoDB 2.7.3\bin\../share/arangodb/js/common/bootstrap/modules.js:1425:20)
2016-02-02T15:48:56Z [7380] ERROR   at ArangoApp.loadAppScript (d:/install/ArangoDB 2.7.3/share/arangodb/js/server/modules/org/arangodb/foxx/arangoApp.js:458:24)
2016-02-02T15:48:56Z [7380] ERROR   at executeAppScript (d:/install/ArangoDB 2.7.3/share/arangodb/js/server/modules/org/arangodb/foxx/manager.js:510:18)
2016-02-02T15:48:56Z [7380] ERROR   at Object.runScript (d:/install/ArangoDB 2.7.3/share/arangodb/js/server/modules/org/arangodb/foxx/manager.js:814:10)
2016-02-02T15:48:56Z [7380] ERROR   at Object.exports.work (d:/install/ArangoDB 2.7.3/share/arangodb/js/server/modules/org/arangodb/foxx/queues/worker.js:118:8)
2016-02-02T15:48:56Z [7380] ERROR   at eval (<anonymous>:6:60)
2016-02-02T15:48:56Z [7380] ERROR   at eval (<anonymous>:9:15)
2016-02-02T15:48:56Z [7380] ERROR   at eval (<anonymous>:9:27)

谢谢!

您的代码看起来不错。我不确定您遇到的根本原因可能是什么,但我相当有信心,出于某种原因,您尝试导入的 Foxx 服务在执行作业时未初始化。

您可能偶尔遇到此问题的一个原因是 ArangoDB 使用多个 V8 上下文,其中执行 JavaScript。作业和 HTTP 请求在其中任何一个中随机执行。因此,如果其中一个有问题,如果在另一个上下文中执行,该作业可能仍然 运行 正常。

通常,导入 Foxx 服务应保证该服务已正确初始化(就像 运行在该服务中创建作业或为来自该服务的请求提供服务一样)。正如您指出问题可能已经自我修复(即它在一段时间后停止发生),这可能意味着上下文最终被正确初始化。

我也未能在 2.8 上重现该问题,但我们会对此进行密切关注。我不认为问题是 Windows 特有的。如果问题再次出现,我建议将进一步讨论移至 the Google Groups thread and opening an issue on GitHub