Подтвердить что ты не робот

Рендеринг PDF не работает в среде prod

У меня очень странная проблема с рендерингом PDF, работающим повсюду, но не по prod. Среда разработки и тестирования работает без проблем, но prod просто не справляется с этим. Единственные изменения, которые сейчас происходят по версии: более высокая версия Grails, чем предыдущая война (2.1.02.3.8 [но это изменение было введено в тестовую среду ~ 2 месяца назад, и все проблемы были решены тогда)) с несколько обновленных плагинов, особенно

compile ":rendering:0.4.3"

изменено на

compile ":rendering:1.0.0"

Stacktrace я получаю prod:

java.lang.NullPointerException
at org.xhtmlrenderer.swing.NaiveUserAgent.getBinaryResource(NaiveUserAgent.java:228)
at org.xhtmlrenderer.pdf.ITextFontResolver.importFontFaces(ITextFontResolver.java:97)
at org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:178)
at org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:142)
at grails.plugin.rendering.pdf.PdfRenderingService.doRender(PdfRenderingService.groovy:36)
at grails.plugin.rendering.RenderingService.render(RenderingService.groovy:43)
at grails.plugin.rendering.RenderingService.render(RenderingService.groovy:37)
at grails.plugin.rendering.RenderingService.render(RenderingService.groovy:35)
at grails.plugin.rendering.RenderingService.render(RenderingService.groovy:65)
at GrailsMelodyGrailsPlugin$_closure4_closure16_closure17.doCall(GrailsMelodyGrailsPlugin.groovy:184)
at RenderingGrailsPlugin$_closure3.doCall(RenderingGrailsPlugin.groovy:59)
at com.my.app.ReportController$_closure8.doCall(ReportController.groovy:169)
at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:200)
at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
at net.bull.javamelody.JspWrapper.invoke(JspWrapper.java:150)
at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:285)
at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:198)
at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:176)

Мой ReportController метод для создания pdf файлов (здесь ничего не происходит, да, файл pdfShow начинается с подчеркивания):

    def generatePdf = {
    if (!params.id) {
        throw new IllegalArgumentException("PDF Generation: an instance identifier has not been passed.")
    }
    def reportInstance = Report.findById(params.id)
    renderPdf(template: "pdfShow", model: [reportInstance: reportInstance], filename: reportInstance?.reportFilename + '.pdf')
}

Я уже провел довольно много исследований и нашел признаки того, что это может быть проблема с шрифтами, объявленными в .css файле, который используется шаблоном pdf.

Ну, это .css:

@font-face {
    src: url("../fonts/DejaVuSansCondensed.ttf");
    -fs-pdf-font-embed: embed;
    -fs-pdf-font-encoding: Identity-H;
}

@font-face {
    src: url(../fonts/DejaVuSansCondensed-Bold.ttf);
    -fs-pdf-font-embed: embed;
    -fs-pdf-font-encoding: Identity-H;
}

body {
    font-family: "DejaVu Sans Condensed", Arial, sans-serif;
}

И шрифты есть, как на тест, так и на prod. И не изменили своего местоположения.

Я попытался добавить плагин rendering обратно в 0.4.3, но он не работал, жалуясь на недоступные классы:

plugins\rendering-0.4.3\grails-app\services\grails\plugin\rendering\document\XhtmlDocumentService.groovy: 20: unable to resolve class org.xhtmlrenderer.resource.XMLResource
(...)\plugin\rendering\pdf\PdfRenderingService.groovy: 25: unable to resolve class com.lowagie.text.pdf.BaseFont
(...)\plugin\rendering\pdf\PdfRenderingService.groovy: 19: unable to resolve class org.xhtmlrenderer.pdf.ITextRenderer
...and few others etc.

в BuildConfig.groovy

legacyResolve true

внутри grails.project.dependency.resolution { ... тоже не работает.

Есть ли у вас какие-либо идеи, что может быть неправильным?

4b9b3361

Ответ 1

То, что решило проблему, добавляло одну строку к Config.groovy:

environments {
    production {
        (...)
        grails.resources.processing.enabled = false

У нас была эта строка в средах test и development, но до этого, с Grails 2.1.0, она все равно работала.