Tengo una aplicación bastante estándar 2.0.3 Grails y he ejecutado grails install-templates
que coloca los archivos list.gsp, edit.gsp, etc. en src/templates/scaffolding/directory. Estos archivos no se vuelven a cargar automáticamente cuando se realiza un cambio en ellos. ¿Hay alguna manera de que pueda volver a cargar estos automáticamente para que no tenga que detener/iniciar la aplicación cada vez que realice un cambio? Intenté buscar en watchedResources, pero eso parece estar relacionado con el desarrollo de complementos.Recargar automáticamente archivos de plantilla
Respuesta
Tiene razón en que el mecanismo de "recursos mirados" solo se aplica a los complementos. La solución correcta para este sería modificar el núcleo ScaffoldingGrailsPlugin.groovy
añadir
def watchedResources = "file:./src/templates/scaffolding/*"
y es probable que vale la pena enviar un JIRA a tal efecto. Mientras tanto, puede lograr que funcione al escribir un plugin simple para "inyectar" este comportamiento en el plugin de andamios. No grails create-plugin watch-scaffolding
y luego usar lo siguiente para el descriptor de plugin:
import org.codehaus.groovy.grails.plugins.GrailsPlugin
class WatchScaffoldingGrailsPlugin {
def version = "0.1"
def grailsVersion = "2.0 > *"
def dependsOn = [:]
def pluginExcludes = [ "grails-app/views/error.gsp" ]
def title = "Watch Scaffolding Plugin"
def author = "Your name"
def authorEmail = ""
def description = '''\
Watches for changes to scaffolding templates and reloads dynamically-scaffolded
controllers and views.
'''
// URL to the plugin's documentation
def documentation = "http://grails.org/plugin/watch-scaffolding"
// watch for changes to scaffolding templates...
def watchedResources = "file:./src/templates/scaffolding/*"
// ... and kick the scaffolding plugin when they change
def onChange = { event ->
event.manager.getGrailsPlugin('scaffolding').notifyOfEvent(
GrailsPlugin.EVENT_ON_CHANGE, null)
}
// rest of plugin options are no-op
def onConfigChange = { event -> }
def doWithWebDescriptor = { xml -> }
def doWithSpring = { }
def doWithDynamicMethods = { ctx -> }
def doWithApplicationContext = { applicationContext -> }
def onShutdown = { event -> }
}
Ahora en la BuildConfig.groovy
su aplicación añadir
grails.plugin.location.'watch-scaffolding' = '../watch-scaffolding'
(o lo que es la ruta relativa apropiada de la raíz de su aplicación a la raíz el complemento) y sus cambios en la plantilla del andamio deberían comenzar a cargarse automáticamente.
(Esto se prueba en Grails 2.1, inicialmente He intentado utilizar influences pero no tiene ningún efecto, sin embargo forzando un evento onChange
en el plugin andamios habían el resultado requerido.)
Según GRAILS-755, este ha sido corregido, pero no creo que tenga porque tampoco me lo vuelven a cargar.
A partir de ese Jira, aquí hay una posible solución:
utilizar el plugin de consola y ejecuta este comando para borrar la vista andamiaje de memoria caché dinámica:
def scaffoldedView = org.codehaus .groovy.grails.scaffolding.view.ScaffoldingViewResolver.scaffoldedViews.clear()
Después de eso, la próxima vez que solicita una página, que no lo encuentra en el caché, y por lo tanto se remonta a la d isk para recrearlo.
Este código vacía el caché de andamios. Puede crear una acción de administrador específica para él:
org.codehaus.groovy.grails.scaffolding.view.
ScaffoldingViewResolver.scaffoldedViews.clear()
Esta es una buena solución rápida, pero estaba buscando algo un poco más automático. ¡Gracias! –
- 1. Recargar archivos Clojure en emacs
- 2. ¿Cómo forzar a SciTE a recargar un archivo automáticamente?
- 3. ¿Traducir automáticamente archivos .po?
- 4. Recargar UITableViewController
- 5. Recargar rubygem en IRB
- 6. (Rails) Recargar archivos "lib" sin tener que reiniciar el servidor ...?
- 7. Cómo recargar CSS al usar Less.js
- 8. Eliminar plantilla de proyecto personalizada que se importó automáticamente
- 9. cómo imprimir archivos tiff automáticamente
- 10. Recargar app.config con nunit
- 11. UITableView recargar datos
- 12. jquery multiselect recargar
- 13. ¿Log4Net puede eliminar archivos de registro automáticamente?
- 14. Recargar carriles inicializadores
- 15. Recargar datos en UIPickerView
- 16. Cómo recargar UIViewController
- 17. HTTPD recargar Apache
- 18. Ajax Recargar iframe
- 19. Recargar ayudante de rieles consola
- 20. Recargar la animación de tabla
- 21. Recargar un atributo de modelo
- 22. ¿Cómo comentar en archivos de plantilla? (TPL)
- 23. Archivos de objeto en C++ con plantilla
- 24. C++ plantilla y archivos de cabecera
- 25. Cómo forzar IE a recargar javascript?
- 26. ¿Puede RStudio generar automáticamente una plantilla roxygen para una función?
- 27. Eliminar automáticamente archivos/carpetas en R
- 28. ¿Ha marcado automáticamente los archivos como resueltos?
- 29. ¿Puede Sweave producir muchos archivos PDF automáticamente?
- 30. Recargar scripts django wsgi sin root
Esto funciona muy bien para archivos .gsp pero no parece recoger el archivo Controller.groovy por alguna razón. ¿Alguna idea? –
Veo lo mismo: cambiar 'Controller.groovy' no causa un evento' onChange'. La documentación sugiere que hay un manejo especial para 'watchedResources' que son archivos' .groovy': "Si los recursos observados especifican un archivo Groovy, cuando se cambie se volverá a cargar automáticamente y se pasará al cierre onChange en el objeto de evento" , y supongo que dado que 'Controller.groovy' no es un archivo Groovy en el sentido habitual (no se compila y vuelve a cargar) no está activando el evento. –
Más interesante aún, cambiar una plantilla de vista _después_ de haber cambiado 'Controller.groovy' debería hacer que el controlador también se vuelva a cargar (cualquier cambio en una vista desencadena un nuevo andamio completo).Pero no es así En este caso mi sospecha es que el controlador scaffolded _es_ de hecho se está regenerando, pero debido a que la clase regenerada tiene el mismo nombre que la anterior y Grails está intentando compilarla en el mismo cargador de clases, el cargador de clases nos devuelve la antigua 'Clase' objeto en lugar de uno nuevo ... –