2016-08-17 1 views
0

mon application Grails 2.3.7 manque son contexte d'application pour les liens dans un scénario spécifique. Pendant que je me développe, tout va bien. Lorsque je déploie l'application sur Tomcat 8 et la démarre avec dbCreate dans la source de données sous la forme create ou create-drop, tout fonctionne correctement. Mais lorsque je redémarre Tomcat (ou redéploie) et que dbCreate est défini dans datasource sur none, les liens de l'application sont générés sans le contexte de l'application. J'utilise <g:link controller="controller" action="action">Link Text</g:link> pour créer des liens, dans le développement et si vous utilisez dbCreate="create" liens sont générés /application/controller/action mais lors de l'utilisation dbCreate="none" après des liens de redémarrage sont générés sous forme /controller/action, la partie application manque et donc la cible du lien ne peut être trouvé. Pour les ressources telles que les fichiers CSS, les liens de ressources sont générés correctement, y compris la partie application. J'ai essayé de définir grails.app.context et grails.serverURL dans Config.groovy, mais sans succès. Je serais reconnaissant pour toute indication sur la résolution de ce problème. (La recherche sur SO renvoie simplement des questions dans la direction opposée, où les gens demandent comment omettre la partie application dans le lien, ce n'est pas ce que je veux.)Grails App est manquant le contexte d'application dans les liens après redéployer

Mise à jour: Ne semble pas être liée à tomcat, J'ai le même comportement lors de l'exécution avec grails run-app.

Mise à jour: Je peux reproduire ce avec run-app, prod run-app et aussi des guerres déployées, mais l'erreur ne se produit pas à chaque fois, peut-être pendant 2 3 départs de la web-app, donc je suppose que cela pourrait être un problème de synchronisation avec le contexte de servlet, mais je ne sais pas encore plus. Upadte: Débogage montre que dans DefaultLinkGenerator le contextPath est égal à la chaîne vide, mais devrait être soit null ou 'application'.

Mise à jour: Le bean grails grailsLinkCreator est correctement instancié lors du démarrage de l'application. Ce beans est implémenté en CachingLinkGenerator qui appelle sa superclasse DefaultLinkGenerator. Au cours du démarrage, mais après la création et l'initialisation de ce bean, la variable contextPath dans DefaultLinkGenerator est définie sur la chaîne vide, mais je ne sais pas quand, d'où et pourquoi.

Répondre

-1

Je ne peux toujours pas fixer (ou trouver) la raison pour laquelle cela se produit, mais je l'ai trouvé une solution de contournement ici sur le SO: Grails - override a bean property value in resources.groovy

La partie pertinente est:

Si vous souhaitez modifier les haricots avant BootStrap a courir, vous pouvez utiliser un BeanPostProcessor [...]

src/Groovy/yourpkg/CustomBeanPostProcessor:

import org.springframework.beans.factory.config.BeanPostProcessor 

class CustomBeanPostProcessor implements BeanPostProcessor{ 

    @Override 
    Object postProcessBeforeInitialization(Object bean, String beanName) { 
     return bean 
    } 

    @Override 
    Object postProcessAfterInitialization(Object bean, String beanName) { 
     if(beanName == 'messageSource') { 
      bean.setFallbackToSystemLocale = true 
     } 
     return bean 
    } 
} 

resources.groovy:

beans = { 
    customBeanPostProcessor(CustomBeanPostProcessor) 
} 
+0

Un lien vers une solution potentielle est toujours le bienvenu, mais s'il vous plaît [ajouter du contexte autour du lien] (// meta.stackoverflow.com/a/8259) de sorte que votre compagnon les utilisateurs auront une idée de ce que c'est et pourquoi c'est là. Toujours citer la partie la plus pertinente d'un lien important, dans le cas où le site cible est inaccessible ou va définitivement hors ligne. Tenez compte du fait qu'être _barely plus qu'un lien vers un site externe_ est une raison possible de [Pourquoi et comment certaines réponses sont-elles supprimées?] (// stackoverflow.com/help/deleted-answers). – FrankerZ

+0

@FrankerZ J'ai édité ma réponse selon votre suggestion, merci pour l'indice. – Calon