Как включить MCR и ссылаться на сборку MATLAB в функции NET Http Trigger Azure? - PullRequest
1 голос
/ 16 января 2020

В настоящее время я работаю над проектом проверки концепции, используя функции Azure, NET и Docker для создания функции HttpTrigger Azure, которая использует сборку MagicSquareComp.dll, созданную в следующем учебном пособии:

https://www.mathworks.com/help/compiler_sdk/gs/create-a-dotnet-application-with-matlab-code.html

Мне удалось создать обобщенную c. NET Azure функцию, следуя инструкции ниже:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-function-linux-custom-image?tabs=nodejs

Я попытался объединить технологии, использованные в обоих этих уроках, чтобы создать функцию Azure, которая будет печатать магический квадрат c. Мне удалось получить эту функцию для функции HttpTrigger Azure, которая будет работать как в моей локальной среде Windows, так и на виртуальной машине Ubuntu 18.04 после установки среды выполнения MATLAB и правильной настройки. Однако, когда я пытаюсь использовать файл docker и запускать функцию Azure из контейнера docker с помощью команд docker build и docker run, я сталкиваюсь со следующей ошибкой:

Microsoft.Azure.WebJobs.Host.FunctionInvocationException: Exception while executing function:
MyHttpTrigger ---> System.TypeInitializationException: The type initializer for 'MagicSquareComp.Class1' 
threw an exception. ---> System.TypeInitializationException: The type initializer for
'MathWorks.MATLAB.NET.Utility.MWMCR' threw an exception. ---> System.TypeInitializationException: The 
type initializer for 'MathWorks.MATLAB.NET.Arrays.MWArray' threw an exception. ---> 
System.DllNotFoundException: Unable to load shared library 'mclmcrrt9_7.dll' or one of its dependencies. 
In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: 
libmclmcrrt9_7.dll: cannot open shared object file: No such file or directory 

Контейнер docker, который я использую, является контейнером Linux, и я установил на него среду выполнения MATLAB точно так же, как я установил ее на свою виртуальную машину Ubuntu 18.04, и точно так же установил переменные среды. Я убедился, что MWArray.dll и MagicSquareComp.dll находятся в каталоге / home / site / wwwroot/bin/. Я попытался скопировать папку времени выполнения MATLAB в / home / site / wwwroot/bin/runtimes/. Ни один из них, похоже, не оказал никакого влияния. Я по-прежнему получаю ту же ошибку при попытке запустить из файла Docker.

Ниже приведен код, который я использовал в файле docker:

# FROM microsoft/dotnet:2.2-sdk AS installer-env 



# COPY . /src/dotnet-function-app 

# RUN cd /src/dotnet-function-app && \ 

#     mkdir -p /home/site/wwwroot && \ 

#     dotnet publish *.csproj --output /home/site/wwwroot 





FROM ubuntu:18.04 AS installer-env 

RUN apt-get -qq update && \ 

    apt-get -qq install -y nodejs && \ 

    apt-get -qq install -y npm && \ 

    npm install -g azure-functions-core-tools && \ 

    apt-get -qq install -y curl && \ 

    apt-get -qq install -y wget && \ 

    apt-get -qq install -y unzip && \ 

    curl -sL https://aka.ms/InstallAzureCLIDeb | bash && \ 

    wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb && \ 

    dpkg -i packages-microsoft-prod.deb && \ 

    apt-get -qq update && \ 

    apt-get -qq install -y apt-transport-https && \ 

    apt-get -qq update && \ 

    apt-get -qq install -y dotnet-sdk-2.1 && \ 

    mkdir /mcr-install && \ 

    mkdir /opt/matlab_runtime && \ 

    cd /mcr-install && \ 

    wget https://ssd.mathworks.com/supportfiles/downloads/R2019b/Release/3/deployment_files/installer/complete/glnxa64/MATLAB_Runtime_R2019b_Update_3_glnxa64.zip && \ 

    unzip -q MATLAB_Runtime_R2019b_Update_3_glnxa64.zip && \ 

    ./install -destinationFolder /opt/matlab_runtime -agreeToLicense yes -mode silent && \ 

    cd && \ 

    rm -rf /mcr-install 



COPY . /src/dotnet-function-app 

RUN cd /src/dotnet-function-app && \ 

    mkdir -p /home/site/wwwroot && \ 

    dotnet publish *.csproj --output /home/site/wwwroot && \ 

    chmod 777 /home/site/wwwroot/bin/MWArray.dll && \ 

    chmod 777 /home/site/wwwroot/bin/MagicSquareComp.dll && \ 

    cp -rf /opt/matlab_runtime /home/site/wwwroot/bin/runtimes 



# To enable ssh & remote debugging on app service change the base image to the one below 

# FROM mcr.microsoft.com/azure-functions/dotnet:2.0-appservice  

FROM mcr.microsoft.com/azure-functions/dotnet:2.0 

ENV AzureWebJobsScriptRoot=/home/site/wwwroot \ 

    AzureFunctionsJobHost__Logging__Console__IsEnabled=true 



ENV LD_LIBRARY_PATH=/opt/matlab_runtime/v97/runtime/glnxa64:/opt/matlab_runtime/v97/bin/glnxa64:/opt/matlab_runtime/v97/sys/os/glnxa64:/opt/matlab_runtime/v97/extern/bin/glnxa64 



ENV XAPPLRESDIR=/opt/matlab_runtime/v97/X11/app-defaults 



COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"] 

MagicSquareComp.dll был сгенерирован с использованием MATLAB на Windows. Не похоже, что это вызовет проблему, так как я смог запустить функцию Azure и правильно ссылаться на MagicSquareComp.dll и MWArray.dll в Linux VM.

Любая помощь в этом будет принята с благодарностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...