resource - ¿Grails 2.0-uso correcto de serverURL para producción?
grails form tag (2)
¡Buena pregunta! Estaba buscando la forma correcta de obtener el serverURL
real sin necesidad explícita de configurarlo en Config.groovy (en una aplicación Grails 2.1).
Desde Grails 2.0, hay una clase súper útil llamada LinkGenerator
que puedes usar prácticamente en cualquier lugar, por ejemplo, en un Servicio:
import org.codehaus.groovy.grails.web.mapping.LinkGenerator
Class MyService {
LinkGenerator grailsLinkGenerator
String serverUrl() {
// Generate: http://localhost:8080/link-generator
grailsLinkGenerator.serverBaseURL
}
}
Gracias al Sr. Haki por blogging acerca de esto!
Grails 2.0 cambió con la forma en que usa grails.serverURL para entornos de desarrollo y prueba (como se describe en el manual ). Sin embargo, he tenido varios problems con serverURL con respecto a la implementación de producción en Tomcat. Parece que hay varias opciones para serverURL (modo de producción):
(Agregado) esta configuración es solo "humo y espejos", porque Tomcat y Jetty tienen métodos para controlar cómo se maneja la URL para la aplicación, hasta el nivel de "Aplicación".
Úselo para especificar el servidor (como se indica como "TODO" en Config.groovy)
No lo use como lo indica uno de los colaboradores de Grails, es decir, "Siempre debería ser seguro eliminar la propiedad serverURL y dejar que Grails genere las URL relacionadas con la aplicación actual". No está claro si esto se extiende a la producción o no (cuando no se generan correos electrónicos).
- Utilice otro método en su lugar, a saber, grails.app.context, que no está documentado en el manual de Grails 2.0, pero se describe en ciertas referencias, here y here .
¿Puede aclarar el uso correcto de serverURL y app.context, tanto para Jetty como para Tomcat (modo de producción)?
Gracias
Así que la idea básica del parámetro de configuración grails.serverURL es permitir que el método createLink sepa qué URL desea al crear enlaces absolutos. Si no se especifica ningún parámetro de configuración grails.serverURL, se establecerá de forma predeterminada en http: // localhost: 8080 (a menos que se especifique server.port, entonces 8080 será lo que sea) ...
El contexto de la aplicación le dice a Jetty / Tomcat que ejecute la aplicación en una raíz diferente. Por ejemplo, especificando
grails.app.context="/myApp"
establecerá la raíz de su aplicación en "/ myApp". En el modo de producción, el contexto de la aplicación es manejado por el contenedor web y esta directiva es ignorada. La elección de configurar sus instancias de jetty o tomcat de producción para ejecutar su aplicación en un contexto diferente depende totalmente de cuáles sean sus requisitos técnicos.
Entonces, lo que realmente se debe tener en cuenta es que en su aplicación, ¿está creando una gran cantidad de enlaces absolutos en sus GSP en los que necesita definir un servidor de "producción"? Si no es así, entonces no necesita especificarlo; Si es así, entonces deberá especificarlo.
Como preferencia personal, lo primero que siempre hago después de crear un nuevo proyecto de grails es ir a la configuración y cambiar el grails.app.context a "/" ... Hace que la creación de un entorno de producción sea mucho más fácil para mí.
¡Espero que esto aclare las cosas!