我在Grails上使用Groovy并配置了资源插件。 我有这种情况:
我有一个产品,它有多个图像。
管理员可以删除任何图片。
逻辑是当管理员点击“删除”时,我从文件系统中删除文件(及其拇指文件)。
整个过程工作顺利,但经过一段时间(5-6分钟),当资源插件再次刷新其资源时,它会抛出一个错误,说“,某些模块依赖于资源[path / to / file]但找不到文件“。
堆栈跟踪如下:
2012-08-10 12:49:41,159 [http-8080-2] ERROR errors.GrailsExceptionResolver - Exception occurred when processing request: [GET] /
Stacktrace follows:
org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: Error executing tag <r:layoutResources>: Module [__@adhoc-files@__] depends on resource [/images/product/p312roduct/original/Candle_4.jpg] but the file cannot be found at /home/desktop2/finalWorkspace3/ds/grails-app/views/layouts/main.gsp:13
at home_desktop2_finalWorkspace3_ds_grails_app_views_layouts_main_gsp$_run_closure1.doCall(main.gsp:13)
at home_desktop2_finalWorkspace3_ds_grails_app_views_layouts_main_gsp$_run_closure1.doCall(main.gsp)
at home_desktop2_finalWorkspace3_ds_grails_app_views_layouts_main_gsp.run(main.gsp:17)
at org.grails.plugin.resource.DevModeSanityFilter.doFilter(DevModeSanityFilter.groovy:44)
at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:197)
at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:171)
at java.lang.Thread.run(Thread.java:679)
Caused by: java.lang.IllegalArgumentException: Module [__@adhoc-files@__] depends on resource [/images/product/p312roduct/original/Candle_4.jpg] but the file cannot be found
at org.grails.plugin.resource.ResourceTagLib$_closure8.doCall(ResourceTagLib.groovy:463)
at org.grails.plugin.resource.ResourceTagLib.invokeMethod(ResourceTagLib.groovy)
at org.grails.plugin.resource.ResourceTagLib$_closure6.doCall(ResourceTagLib.groovy:387)
... 7 more
2012-08-10 12:49:41,172 [http-8080-2] ERROR pages.GroovyPagesServlet - Error processing GSP: Error executing tag <r:layoutResources>: Module [__@adhoc-files@__] depends on resource [/images/product/p312roduct/original/Candle_4.jpg] but the file cannot be found at /home/desktop2/finalWorkspace3/ds/grails-app/views/layouts/main.gsp:13
org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: Error executing tag <r:layoutResources>: Module [__@adhoc-files@__] depends on resource [/images/product/p312roduct/original/Candle_4.jpg] but the file cannot be found at /home/desktop2/finalWorkspace3/ds/grails-app/views/layouts/main.gsp:13
at home_desktop2_finalWorkspace3_ds_grails_app_views_layouts_main_gsp$_run_closure1.doCall(main.gsp:13)
at home_desktop2_finalWorkspace3_ds_grails_app_views_layouts_main_gsp$_run_closure1.doCall(main.gsp)
at home_desktop2_finalWorkspace3_ds_grails_app_views_layouts_main_gsp.run(main.gsp:17)
at org.grails.plugin.resource.DevModeSanityFilter.doFilter(DevModeSanityFilter.groovy:44)
at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:197)
at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:171)
at java.lang.Thread.run(Thread.java:679)
Caused by: java.lang.IllegalArgumentException: Module [__@adhoc-files@__] depends on resource [/images/product/p312roduct/original/Candle_4.jpg] but the file cannot be found
at org.grails.plugin.resource.ResourceTagLib$_closure8.doCall(ResourceTagLib.groovy:463)
at org.grails.plugin.resource.ResourceTagLib.invokeMethod(ResourceTagLib.groovy)
at org.grails.plugin.resource.ResourceTagLib$_closure6.doCall(ResourceTagLib.groovy:387)
... 7 more
答案 0 :(得分:3)
资源插件期望模块中的基础文件不会更改。此外,由应用程序直接链接的任何静态资产(而不是通过模块或&lt; g:resource&gt;标记)都被视为ad-hoc,并作为模块添加到资源上下文中。这样即使资源插件也可以对这些“遗留”资产进行缩小,编译,缓存等。
如果您使用文件系统来提供这些有些动态的资产,那么最好将它们从资源插件的临时处理中排除。设置配置标志grails.resources.adhoc.excludes以排除存储这些资产的目录。