2013-08-20 34 views
0

我正在實現Grails插件,並且遇到很大問題,因爲Grails在重新加載靜態資源之前觸發onChange事件。所以有時它會返回過期的css/js版本。Grails如何在沒有資源插件的情況下處理靜態文件?

請向我解釋Grails如何重新加載靜態資源(css/js)(當我運行run-app的應用程序時)?靜態資源重新加載後,是否可以觸發onChange事件?

回答

0

好吧......我花了4-5個小時來調試它。 Grails使用Tomcat來處理靜態資源 - 檢查org.apache.catalina.servlets.DefaultServlet.serveResource方法。 Tomcat緩存靜態資源5秒鐘。所以可能會出現這樣的情況,即Grails觸發插件文件被更改,但Tomcat將返回緩存值GET請求。我創建了票ticket並更準確地描述了它

0

如果您使用資源插件,您可以檢查his source code。我想他會安排一次更改,如果再次更改文件,可能會取消它。

def onChange = { event -> 
     if (event.source instanceof FileSystemResource) { 
      if (isResourceWeShouldProcess(event.source.file)) { 
       log.info("Scheduling reload of resource files due to change of file $event.source.file") 
       triggerReload { 
        event.application.mainContext.grailsResourceProcessor.reloadChangedFiles() 
       } 
      } 
     } else if (handleChange(application, event, getResourceMapperArtefactHandler().TYPE, log)) { 
      log.info("Scheduling reload of mappers due to change of $event.source.name") 
      triggerReload { 
       event.application.mainContext.grailsResourceProcessor.reloadMappers() 
      } 
     } else if (handleChange(application, event, getResourcesArtefactHandler().TYPE, log)) { 
      log.info("Scheduling reload of modules due to change of $event.source.name") 
      triggerReload { 
       event.application.mainContext.grailsResourceProcessor.reloadModules() 
      } 
     } 
    } 
相關問題