Ho una bella app 2.0.3 Grails e ho eseguito grails install-templates
che posiziona file list.gsp, edit.gsp, ecc. Nella directory src/templates/scaffolding /. Questi file non vengono ricaricati automaticamente quando viene apportata una modifica. C'è un modo per ottenere che questi vengano ricaricati automaticamente, quindi non devo interrompere/avviare l'app ogni volta che apporto una modifica? Ho provato a guardare ResourcesRisorse ma sembra essere collegato allo sviluppo di plugin.Ricarica automaticamente i file modello
risposta
Si è verificato che il meccanismo delle "risorse osservate" si applica solo ai plug-in. La correzione corretto per questo potrebbe essere quella di modificare il nucleo ScaffoldingGrailsPlugin.groovy
aggiungere
def watchedResources = "file:./src/templates/scaffolding/*"
ed è probabilmente vale la pena di presentare una JIRA in tal senso. Nel frattempo, potresti riuscire a farlo funzionare scrivendo un semplice plugin per "iniettare" questo comportamento nel plug-in dello scaffolding. Non grails create-plugin watch-scaffolding
e quindi utilizzare la seguente per il descrittore 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 -> }
}
Ora, nel del BuildConfig.groovy
dell'applicazione aggiungere
grails.plugin.location.'watch-scaffolding' = '../watch-scaffolding'
(o qualunque sia il percorso relativo appropriata dalla radice della vostra applicazione alla radice del il plugin) e le modifiche del modello di ponteggio dovrebbero iniziare a ricaricarsi automaticamente.
(Questa è testato su Grails 2.1, ho inizialmente provato con influences ma non ha alcun effetto, tuttavia forzando un evento onChange
nel plugin ponteggio era il risultato richiesto.)
Secondo GRAILS-755, questo è stato corretto, ma non credo che lo sia perché non ricaricano neanche per me.
Da quel Jira, ecco un possibile soluzione:
usare il plugin console, ed eseguire questo comando per cancellare la dinamica vista ponteggi della cache:
def scaffoldedView = org.codehaus .groovy.grails.scaffolding.view.ScaffoldingViewResolver.scaffoldedViews.clear()
Dopo di che, la prossima volta che richiedono una pagina, non trova nella cache , e va quindi torna al d isk per ricrearlo.
Questo codice svuota la cache di scaffolding. È possibile creare un'azione di amministrazione specifica per questo:
org.codehaus.groovy.grails.scaffolding.view.
ScaffoldingViewResolver.scaffoldedViews.clear()
Questa è una buona soluzione rapida, ma cercavo qualcosa di un po 'più automatico. Grazie! –
- 1. Ricarica un attributo modello
- 2. Modello Meteor ricarica infinito
- 3. Traduci automaticamente i file .po?
- 4. Paperclip pulisce automaticamente i nomi dei file?
- 5. Ricarica .emacs per tutti i buffer attivi
- 6. come stampare automaticamente i file tiff
- 7. come ignorare automaticamente i file in grep
- 8. eliminare automaticamente i file in Google Drive
- 9. Fa ofstream chiude automaticamente i suoi file?
- 10. Rendere i nuovi file automaticamente eseguibili?
- 11. Come si effettua il codice in lib/si ricarica automaticamente quando il file cambia?
- 12. JSF e ricarica automatica dei file XHTML
- 13. controllo file system chrome - ricarica cambio
- 14. Ricarica il file di tag Vim
- 15. Gulp con live-ricarica
- 16. Angular2 router.navigate ricarica app
- 17. Ricarica AVMutableComposition
- 18. AngularJS: rileva automaticamente la modifica nel modello
- 19. trova i file non uguali al modello
- 20. Come commentare i file modello? (.tpl)
- 21. Ricarica rubygem in IRB
- 22. Jekyll auto-ricarica
- 23. Ricarica app.config con NUnit
- 24. Come ricaricare automaticamente css in Chrome dopo aver modificato i file SASS
- 25. Come salvare automaticamente i file su perdere focus in Emacs
- 26. Aggiorna automaticamente la pagina quando i file sorgente Dart cambiano
- 27. I file creati con Path.GetTempFileName vengono puliti automaticamente?
- 28. Decomprimi automaticamente i file nelle cartelle [mac os x]
- 29. Come aprire i file automaticamente all'avvio di emacs?
- 30. Come impedire a PyCharm di chiudere automaticamente i file aperti?
Questo funziona perfettamente per i file .gsp ma non sembra raccogliere il file Controller.groovy per qualche motivo. qualche idea? –
Vedo la stessa cosa: cambiare 'Controller.groovy' non causa un evento' onChange'. La documentazione suggerisce che esiste una gestione speciale per 'watchedResources' che sono file' .groovy': "Se le risorse guardate specificano un file Groovy, quando viene modificato verrà automaticamente ricaricato e passato alla chiusura onChange nell'oggetto evento" e suppongo che dal momento che 'Controller.groovy' non sia un file Groovy nel senso consueto (non viene compilato e ricaricato) non sta sparando l'evento. –
Ancora più interessante, cambiare un modello di vista _dopo aver cambiato 'Controller.groovy' dovrebbe anche far ricaricare il controller (qualsiasi modifica a una vista attiva un pieno ripiegamento).Ma non è così. In questo caso il mio sospetto è che il controller dello scaffolding sia effettivamente rigenerato, ma poiché la classe rigenerata ha lo stesso nome di quello vecchio e Grails sta tentando di compilarlo nello stesso classloader, il classloader ci restituisce il vecchio 'Class' oggetto piuttosto che uno nuovo ... –