Gestión de múltiples ambientes o entornos en ASP.NET Core
junio 20, 2016 Deja un comentario
En este post vamos a analizar otra característica nueva incluida en ASP.NET Core: El soporte para controlar el comportamiento de nuestra aplicación en múltiples ambientes a través del uso de variables de entorno.
Es muy común que necesitemos especificar ciertos comportamientos en nuestra aplicación dependiendo del ambiente usado. Un modelo muy usual en los proyectos de software es tener ambiente de desarrollo, de pruebas o staging y ambiente de producción. Pues bien, en ASP.NET Core podemos hacer uso de una variable de entorno con el nombre ASPNET_ENV para indicar el ambiente en el que nuestra aplicación está ejecutándose. Con esta variable podemos chequear ciertos valores que nos proponen por convención o bien podemos usar nuestro propio nombre de ambiente.
Inicialmente tenemos las convenciones propuestas para el valor de la variable ASPNET_ENV por el equipo de producto de ASP.NET, que son:
- Ambiente de desarrollo: Development
- Ambiente de pruebas: Staging
- Ambiente de producción: Production
Vamos a ver un ejemplo a continuación para entender mejor esto. En un proyecto ASP.NET Core vamos a agregar un controlador MVC con el siguiente código:
public class HomeController : Controller { private IHostingEnvironment _environment; public HomeController(IHostingEnvironment environment) { _environment = environment; } public IActionResult Index() { if (_environment.IsDevelopment()) { // ASPNET_ENV = Development ViewData["environment"] = "Desarrollo"; } else if (_environment.IsStaging()) { // ASPNET_ENV = Staging ViewData["environment"] = "Pruebas - Staging"; } else if (_environment.IsProduction()) { // ASPNET_ENV = Production ViewData["environment"] = "Produccion"; } else if (_environment.IsEnvironment("MiAmbiente")) { // ASPNET_ENV = MiAmbiente ViewData["environment"] = "Mi ambiente"; } else { // ASPNET_ENV = ? ViewData["environment"] = "Otro ambiente :P"; } return View(); } }
Notemos dos cosas en este código: la inyección de dependencias mediante el constructor de la interface IHostingEnvironment, la cual usamos para evaluar el ambiente actual con los métodos de extensión IsDevelopment, IsStaging y IsProduction (estos verifican los nombres propuestos en la convención mencionada anteriormente) o mediante el método IsEnvironment para verificar otro nombre que no corresponda a la convención.
Luego adicionamos también una vista muy sencilla para imprimir el valor de la variable que estamos asignando al ViewData en el controlador del código anterior
@{ ViewData["Title"] = "Home Page"; } <br /> <p>El ambiente actual es: @ViewData["environment"]</p>
Por último, vamos a configurar el valor de la variable de entorno ASPNET_ENV. Esto lo realizamos desde las opciones del proyecto, haciendo click derecho sobre el proyecto ASP.NET Core en Visual Studio.
Vamos a ejecutar la solución de ejemplo que creamos, y a continuación veremos los resultados con cada uno de los valores de la variable de entorno
Para ambiente de desarrollo:
Para ambiente de staging:
Para ambiente de producción:
Para un ambiente con nombre diferente:
Así podemos ver pues con el ejemplo ASP.NET Core nos facilita la gestión en el código del comportamiento de nuestra aplicación de acuerdo al ambiente en el que se encuentre.
Por último, un tip adicional: Cuando no estamos usando Visual Studio, bien sea porque estamos desarrollando sin él o porque estamos configurando un servidor, el valor de la variable de entorno se puede configurar en el sistema operativo.
Es todo por este post. Aún hay un par de aspectos sobre este tema de múltiples ambientes que vamos a ver en futuros posts. No olvides dejar tus inquietudes o comentarios. Recuerda también visitar la documentación oficial sobre el tema si quieres verlo más a fondo.
El código del ejemplo usado en este post lo puedes encontrar en mi cuenta de GitHub.