Не удается запустить jsreportlocal в Azure WebApp Linux (.Net core 2.1 MVC)

#javascript #azure-web-app-service #asp.net-core-2.1 #jsreport

#javascript #azure-web-app-service #asp.net-core-2.1 #jsreport

Вопрос:

У меня есть существующий.Netcore 2.1 MVC развернут в Azure WebApp Linux. Мне нужно создавать отчеты в формате pdf, поэтому я подумал использовать jsreport local.

 var rs = new LocalReporting().UseBinary(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? JsReportBinary.GetBinary() : jsreport.Binary.Linux.JsReportBinary.GetBinary()).Configure((cfg) =>
    {
         cfg.HttpPort = 1000;
         cfg.AllowedLocalFilesAccess().BaseUrlAsWorkingDirectory();
         return cfg;
    }).AsUtility().Create();
var report = await rs.RenderAsync(new RenderRequest
    {
          Template = new Template
         {
              Recipe = Recipe.ChromePdf,
              Engine = Engine.None,
              Content = contentToPrint
          }
    });
  

В Windows этот код работает нормально. После развертывания в Web App (Linux) Я получаю сообщение об ошибке:

Отчет о неудачной отрисовке ошибки: при попытке выполнить команду отрисовки произошла критическая ошибка: Не удалось запустить chrome!/tmp /jsreport /compile / jsreport-2.4.0-Bk_dhUp8V /chrome/chrome: ошибка при загрузке общих библиотек: libX11.so.6: не удается открыть общий объектный файл: Нет такого файла или directoryTROUBLESHOOTING директории:https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md (1). вызвано ошибкой (1) -> meta = {«remoteStack»: «Ошибка: Не удалось запустить chrome!n/tmp /jsreport /compile /jsreport-2.4.0-Bk_dhUp8V /chrome/chrome: ошибка при загрузке общих библиотек: libX11.so.6: не удается открыть общий объектный файл: нет такого файла или каталога n n nTROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md n n при OnClose (jsreportRuntime.js: 400867:14) n в интерфейсе.helper.addEventListener (jsreportRuntime.js: 400856:50)n в emitNone (events.js: 111:20)n в Interface.emit (events.js: 208:7)n в Interface.close (readline.js: 370:8) n в сокете.onend (readline.js: 149:10)n в emitNone (events.js: 111:20)n в Socket.emit (events.js: 208:7)n в endReadableNT (_stream_readable.js: 1064:12)n в _combinedTickCallback (internal/process/next_tick.js:138: 11)n в процессе._tickCallback (internal/process/next_tick.js:180:9)»}, stack = Ошибка: при responseToBuffer ([eval]:72595:29) при concat ([eval]:72648:40) при ConcatStream. ([eval]: 17182:43) в emitNone (events.js: 111:20) в ConcatStream.emit (events.js: 208:7) в finishMaybe ([eval]: 97353:14) в afterWrite ([eval]: 97215:3) в _combinedTickCallback (internal/process/next_tick.js: 144:20) в процессе._tickCallback (внутренний / процесс/next_tick.js:180:9)

Комментарии:

1. теперь я также попытался запустить его как веб-сервер, используя . Вместо AsWebserver() . AsUtility () но получил ошибку ниже:

2. Сбой Не удалось запустить сервер jsreport, вывод: 2019-04-07 — [34mdebug[39m: проверка подлинности расширения была отключена 2019-04-07 — [34mdebug[39m: авторизация расширения была отключена в 2019 году-04-07 — [34mdebug[39m: стратегия Chrome выделена-process2019-04-07 — [34mdebug[39m: пользовательские параметры запуска Chrome являются ExecutablePath=/tmp/jsreport/compile /jsreport-2.4.0-Bk_dhUp8V/chrome / chrome2019-04-07 — [34mdebug[39m: расширение fs-store было отключено 2019-04-07 —

3. [34mdebug[39m: журналы запросов studio включены (интервал сброса: 2000)2019-04-07 — [34mdebug[39m: создание образцов отключено 2019-04-07 — [34mdebug[39m: Расширение public-templates было отключено в 2019 году-04-07 — [32minfo[39m: Инициализация jsreport@2.4.0 в режиме разработки с использованием файла конфигурации: none2019-04-07 — [32minfo[39m: использование расширения cli2019-04-07 — [32minfo[39m: Использование расширения handlebars2019-04-07 — [32minfo[39m: использование расширения puppeteer-compile2019-04-07 —

4. [32minfo[39m: Использование расширения authentication2019-04-07 — [32minfo[39m: Использование расширения import-export2019-04-07 — [32minfo[39m: Использование расширения templates2019-04-07 — [32minfo[39m: Использование расширения freeze2019-04-07 — [32minfo[39m: Использование расширения debug2019-04-07 — [32minfo[39m: с использованием расширения express2019-04-07T13:56:34.603Z — [32minfo[39m: с использованием расширения tags2019-04-07 — [32minfo[39m: Использование расширения jsrender2019-04-07 — [32minfo[39m: Использование расширения data2019-04-07 —

5. [32minfo[39m: Использование авторизации расширения 2019-04-07 — [32minfo[39m: Использование расширения chrome-pdf2019-04-07 — [32minfo[39m: Использование дочернего расширения-templates2019-04-07 — [32minfo[39m: Использование расширения licensing2019-04-07 — [32minfo[39m: использование расширения pdf-utils2019-04-07 — [32minfo[39m: использование расширения fs-store2019-04-07 — [32minfo[39m: Использование расширения browser-client2019-04-07 — [32minfo[39m: Использование расширения reports2019-04-07 — [32minfo[39m: Использование текстового расширения 2019-04-07 —

Ответ №1:

Безголовый chrome требует некоторых дополнительных общих библиотек, которых нет в среде Azure web app Linux по умолчанию. Однако вы можете использовать Azure web app на базе docker и установить эти необходимые библиотеки.

 RUN apt-get update amp;amp;    
    apt-get install -y gnupg  libgconf-2-4 wget amp;amp; 
    wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - amp;amp; 
    sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' amp;amp; 
    apt-get update amp;amp; 
    apt-get install -y google-chrome-unstable --no-install-recommends

ENV chrome:launchOptions:args --no-sandbox
  

Смотрите это в документации
https://jsreport.net/learn/dotnet-local#docker
https://jsreport.net/learn/dotnet-local#azure-web-apps

и пример
https://github.com/jsreport/jsreport-dotnet-example-docker

Комментарии:

1. переход на веб-приложение на основе docker не является немедленным выбором, поскольку мы уже переходим к производству. Также можно подумать о том, чтобы перейти к другому рецепту, который доступен в среде веб-приложения по умолчанию.