#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 не является немедленным выбором, поскольку мы уже переходим к производству. Также можно подумать о том, чтобы перейти к другому рецепту, который доступен в среде веб-приложения по умолчанию.