繁体   English   中英

Azure Linux 带有 .Net Core Stack 的应用服务。 无法使用 NodeJS

[英]Azure Linux App Service with .Net Core Stack. Unable to use NodeJS

我在 MS Azure 上托管一个 .NET 核心应用程序(在 Linux 服务计划上),我想在 .NET 核心应用程序中运行一些 NodeJS 代码。 我不久前在 Windows 服务计划上做了这个,它在那里工作。 现在我正在尝试使用 Linux 计划,但它不起作用。

首先,我尝试使用“Jering.Javascript.NodeJS”,然后还尝试使用 Microsoft 的“INodeServices”(已过时)。 但是没有找到“节点”。 我也尝试直接启动一个进程(下面的代码),但也没有用。 找不到“节点”。

            var proc = new System.Diagnostics.Process
            {
                StartInfo = new System.Diagnostics.ProcessStartInfo
                {
                    FileName = "node",
                    Arguments = " -v",
                    RedirectStandardOutput = true
                }
            };
            result += "RUN: " + proc.StartInfo.FileName;
            proc.Start();
            var reader = proc.StandardOutput;

NodeJS 安装在服务器上,命令也在那里工作,但似乎 .NET Core 应用程序托管为 docker 并且没有任何外部访问权限来运行 NodeJS。 图片

我在这里找到了有用的信息。

问题是容器中不存在 Node,因此在启动应用程序本身之前,必须有一个脚本来安装和启动它。

复制: 在此处输入图像描述

这是我的脚本:

//using System.Diagnostics;
ProcessStartInfo startinfo = new ProcessStartInfo();
startinfo.FileName = "bash";
//startinfo.FileName = "/etc/opt/nodejs/14.15.0/bin/node"; //it's no use even node package located here.
Process process = new Process();
process.StartInfo = startinfo;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
//install and start nodejs
process.StandardInput.WriteLine("apt-get install curl");
process.StandardInput.WriteLine("curl -sL https://deb.nodesource.com/setup_12.x | bash");
process.StandardInput.WriteLine("apt-get install -y nodejs");
//Run "node -v"
process.StandardInput.WriteLine("node -v");
string line = string.Empty;
        
while (!process.StandardOutput.EndOfStream)
{
     line = process.StandardOutput.ReadLine();
     _logger.LogInformation(line);
}
process.WaitForExit();
return string.Empty;

它适用于我的基于 Linux 的 .net 核心应用程序。 在此处输入图像描述

我想我找到了更好的解决方案;)在应用服务中,您可以安装存储。 就我而言,我安装了一个存储,其中包含 nodeJS 库。 Azure传送门截图

现在我可以执行以下代码:

string result = "";
var proc = new System.Diagnostics.Process
{
    StartInfo = new System.Diagnostics.ProcessStartInfo
    {
        FileName = "/externallibs/node/bin/node",
        Arguments = " -v",
        RedirectStandardOutput = true
    }
};
result += "RUN: " + proc.StartInfo.FileName;
proc.Start();
var reader = proc.StandardOutput;
return result +  reader.ReadToEnd();

您可以在 azure 门户上创建一个名为POST_BUILD_COMMAND的环境变量,并使用命令修复您的环境路径。

Linux 服务计划在此处记录的 Oryx 上运行

POST_BUILD_COMMAND=PATH=/usr/bin/node:$PATH

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM