簡體   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