Mam dość standardową aplikację 2.0.3 Grails i wykonałem grails install-templates
, która umieszcza pliki list.gsp, edit.gsp, itd. W katalogu src/templates/scaffolding /. Pliki te nie są automatycznie ponownie ładowane po wprowadzeniu w nich zmian. Czy jest sposób, w jaki mogę je automatycznie ponownie załadować, więc nie muszę zatrzymywać/uruchamiać aplikacji za każdym razem, gdy dokonuję zmiany? Próbowałem już patrzeć na watchnedResources, ale wydaje się, że jest to związane z rozwojem wtyczki.Automatycznie przeładuj pliki szablonów
Odpowiedz
Masz rację, że mechanizm "obserwowanych zasobów" dotyczy tylko wtyczek. Prawidłowe ustalenie dla tego byłoby zmodyfikować rdzeń ScaffoldingGrailsPlugin.groovy
dodać
def watchedResources = "file:./src/templates/scaffolding/*"
i to chyba warto złożenie JIRA w tym celu. W międzyczasie możesz być w stanie uruchomić go, pisząc własną wtyczkę, aby "wstrzyknąć" to zachowanie do wtyczki rusztowania. Czy grails create-plugin watch-scaffolding
a następnie kliknąć na poniższy dla deskryptora wtyczki:
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 -> }
}
Teraz w danej aplikacji BuildConfig.groovy
dodać
grails.plugin.location.'watch-scaffolding' = '../watch-scaffolding'
(lub cokolwiek jest odpowiednia względna ścieżka z korzenia swojej aplikacji do korzeni wtyczka) i zmiany w szablonie rusztowania powinny zacząć się automatycznie ładować.
(To jest testowany na Grails 2.1, początkowo próbował za pomocą influences ale to nie ma żadnego wpływu, jednak zmuszając zdarzenie w wtyczce rusztowania onChange
był wymagany rezultat.)
Według GRAILS-755, tym zostało naprawione, ale nie sądzę, że ma, ponieważ nie przeładowuje się dla mnie.
Od tego Jira, tutaj jest możliwe obejście:
Użyj wtyczki konsoli i uruchomić to polecenie, aby wyczyścić pamięć podręczną scaffolded dynamicznego wyświetlania:
def scaffoldedView = org.codehaus .groovy.grails.scaffolding.view.ScaffoldingViewResolver.scaffoldedViews.clear()
Po tym, gdy następnym razem mogę zażądać stronę, nie znajdzie go w pamięci podręcznej , a więc sięga d isk, aby go odtworzyć.
Ten kod powoduje opróżnienie pamięci podręcznej rusztowania. Można utworzyć dla niego konkretną akcję administratora:
org.codehaus.groovy.grails.scaffolding.view.
ScaffoldingViewResolver.scaffoldedViews.clear()
To jest dobra szybka naprawa, ale szukałem czegoś bardziej automatycznego. Dzięki! –
- 1. Formatowanie szablonów ERB automatycznie w szablonie
- 2. jak automatycznie drukować pliki tiff
- 3. Czy firmastreamstream automatycznie zamyka pliki?
- 4. Jak publikować pliki nagłówkowe z implementacjami szablonów?
- 5. Jak automatycznie otwierać pliki podczas uruchamiania emacs?
- 6. Webdriver | IE9 | Skonfiguruj automatycznie pobierane pliki
- 7. Czy program pakujący ASP.net automatycznie minimalizuje pliki?
- 8. Przeładuj skrypty django wsgi bez korzenia
- 9. Przeładuj tabelę Wyświetl od AppDelegate
- 10. Jquery Bings Mapy Json przeładuj
- 11. Przeładuj konfigurację Force w Symfony2
- 12. Przeładuj moduł w Pythonie 3.4
- 13. jQuery Odśwież/przeładuj stronę Po sukcesie
- 14. Oddzielne pliki .h i .cpp w implementacji klasy szablonów
- 15. W tym pliki szablonów/html w twoim binarnym
- 16. Zarządzanie zależnościami komponentów sieciowych; Pliki JS, CSS/SASS i pliki szablonów
- 17. Przeładuj ścieżkę w powłoce Power Shell
- 18. Javascript - przeładuj stronę z innym QueryString
- 19. Odśwież/przeładuj mapy: Google maps API V2
- 20. Przeładuj dane w programowo utworzonym tableView
- 21. Dynamicznie przeładuj UIPageViewController po zmianie źródła danych
- 22. "Przeładuj stronę, aby uzyskać źródło ..." w AJAX
- 23. Odśwież/przeładuj zawartość Div używając jquery/ajax
- 24. Czy mogę automatycznie ładować pliki funkcji bez klas w PHP?
- 25. Czy pliki utworzone przy użyciu Path.GetTempFileName są automatycznie czyszczone?
- 26. Jak ukryć automatycznie wygenerowane pliki według TypeScript w NerdTree?
- 27. Czy git rerere automatycznie oznaczy pliki jako rozwiązane?
- 28. Jak automatycznie usunąć pliki tymczasowe w ruby-rails?
- 29. Jak automatycznie generować pliki projektu Tern na podstawie bower/npm?
- 30. Usunięte/Puste grafitowe pliki szeptów automatycznie generują ponowne generowanie
Działa to doskonale w przypadku plików .gsp, ale z jakiegoś powodu nie odbiera pliku Controller.groovy. jakieś pomysły? –
Widzę to samo - zmiana 'Controller.groovy' nie powoduje zdarzenia' onChange'. Dokumentacja sugeruje, że istnieje specjalna obsługa dla 'watchedResources', które są plikami' .groovy': Jeśli obserwowane zasoby określają plik Groovy, po jego zmianie zostanie automatycznie przeładowany i przekazany do zamknięcia onChange w obiekcie zdarzenia " i myślę, że skoro 'Controller.groovy' nie jest plikiem Groovy w zwykłym znaczeniu (nie jest kompilowany i przeładowywany), to nie uruchamia zdarzenia. –
Co ciekawsze, zmiana szablonu widoku _ po zmianie 'Controller.groovy' powinna również spowodować przeładowanie kontrolera (każda zmiana w widoku powoduje pełne ponowne rusztowanie).Ale tak nie jest. W tym przypadku podejrzewam, że kontroler szkieletowy jest w rzeczywistości zregenerowany, ale ponieważ zregenerowana klasa ma taką samą nazwę jak stara, a Grails próbuje skompilować ją w tym samym programie ładującym klasy, program ładujący klasy daje nam z powrotem starą "klasę". obiekt zamiast nowego ... –