Azure service fabric 在来宾可执行文件中运行节点模块
我已经安装了一个全局npm包,通过命令行作为服务运行。我想将其转换为service fabric中的来宾可执行文件,但在实现时遇到了问题 在来宾可执行文件之前,我将在cmd中调用以下命令:Azure service fabric 在来宾可执行文件中运行节点模块,azure-service-fabric,Azure Service Fabric,我已经安装了一个全局npm包,通过命令行作为服务运行。我想将其转换为service fabric中的来宾可执行文件,但在实现时遇到了问题 在来宾可执行文件之前,我将在cmd中调用以下命令: tileserver-gl-light --port=8788 map.mbtiles 我的来宾可执行文件的配置为: <ExeHost> <Program>tileserver-gl-light</Program> <Arguments>--port=
tileserver-gl-light --port=8788 map.mbtiles
我的来宾可执行文件的配置为:
<ExeHost>
<Program>tileserver-gl-light</Program>
<Arguments>--port=8788 c:\maptiles.mbtiles</Arguments>
<WorkingFolder>Work</WorkingFolder>
</ExeHost>
tileserver gl灯
--端口=8788 c:\maptiles.mbtiles
工作
不幸的是,我在尝试运行服务时遇到的错误只是说“有部署错误。是否继续?”
有什么办法让它工作吗
谢谢 您能否通过调用Test ServiceFabricApplicationPackage检查该应用程序包是否在本地计算机上进行验证 通常SF希望文件
在代码包中包含该批处理文件,并将其作为程序引用(并理顺您希望传递args的方式),这样您就可以开始了 正如@masnider所指出的,文件必须存在于应用程序包中,并且我们必须调用操作系统理解的可执行文件。这给节点模块带来了特殊的挑战,如:
- ApplicationPackageRoot
- MyService.ServicePkg
- Code
- 7za.exe
- node.exe
- npm.7z
- start.bat
My ServiceManifest.xml中包含以下值:
<SetupEntryPoint>
<ExeHost>
<Program>7za.exe</Program>
<Arguments>x npm.7z<Arguments>
<WorkingFolder>CodeBase</WorkingFolder>
</ExeHost>
</SetupEntryPoint>
<EntryPoint>
<ExeHost>
<Program>start.bat</Program>
<Arguments><Arguments>
<WorkingFolder>CodeBase</WorkingFolder>
</ExeHost>
<EnvironmentVariables>
<EnvironmentVariable Name="Port" Value="8788"/>
<EnvironmentVariable Name="TilePath" Value="mytiles.mbtiles"/>
</EnvironmentVariables>
</EntryPoint>
那么这是如何工作的呢?代码中的npm.7z由预先压缩的node_模块组成。7za是7zip的可移植版本,可用于解决windows上存在的文件路径长度问题。7za在SetupEntryPoint中调用
然后SF调用start.bat,它读取Port和TilePath的环境变量。这必须精确地调用由普通tileserver gl light命令调用的.js文件
这样做会使service fabric来宾可执行文件中的节点应用程序正常工作。此链接可能会有所帮助:这为我指明了正确的方向,尤其是上面的#2。因此,我将此标记为已接受的答案。我将在下面提供一个详细的答案,因为对于这个特殊的案例有一些细微的差别。谢谢很高兴它有帮助!
.\node.exe npm/node_modules/tileserver-gl-light/sc/main.js --port=%Port% %TilePath%