es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué Blazor está publicando un archivo JSON antiguo?

He escrito una aplicación relativamente sencilla en Blazor WebAssembly. Ahora quiero cambiar el nombre de la base de datos del servidor SQL Server de ‘blazorTest’ (ya que esto comenzó como prueba de concepto) a ‘softwareCensus’ (el nombre sustantivo de la aplicación). He cambiado el nombre en el servidor de la base de datos y en la cadena de conexión dentro de SoftwareCensus.Server/appsettings.json. Esta transición funciona bien cuando ejecuto la aplicación desde Visual Studio 2022.

Sin embargo, cuando publico la aplicación en otro servidor de nuestra red (donde residirá), se crea un archivo appsettings.production.json dentro de la carpeta ‘Server’. Este archivo tiene ‘blazorTest’ en la cadena de conexión y aparentemente es utilizado por la aplicación, ya que obtengo errores 500 al ejecutar la aplicación desde el servidor.

Si cambio manualmente la cadena de conexión en appsettings.production.json del otro servidor a ‘softwareCensus’, todo se ejecuta correctamente. Sin embargo, no quiero tener que cambiar manualmente un archivo cada vez que publique una actualización de la aplicación :P.

He buscado en mi solución el texto ‘blazorTest’ y no aparece en ninguna parte. Sin embargo, cada vez que publico en el servidor, se crea o modifica appsettings.production.json dentro de la carpeta ‘Server’ para incluir el nombre de la base de datos ‘blazorTest’.

Intenté corregir esto creando un archivo appsettings.production.json en el proyecto SoftwareCensus.Server (debajo de appsettings.json). Este nuevo archivo contenía ‘softwareCensus’ en la cadena de conexión, pero al hacer la publicación, sigue generando un archivo appsettings.production.json con el nombre antiguo de la base de datos.

¿De dónde viene esta información antigua de la cadena de conexión para appsettings.production.json y cómo puedo editar esa información para reflejar el nuevo nombre de la base de datos?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Es posible que la información antigua de la cadena de conexión se esté almacenando en un archivo de configuración o en una variable de entorno en el servidor donde se publica la aplicación. Una solución podría ser verificar todos los archivos de configuración y las variables de entorno en el servidor en busca de cualquier instancia del antiguo nombre de la base de datos y actualizarlo al nuevo nombre.

    Otra solución podría ser utilizar un sistema de reemplazo de tokens en los archivos appsettings. Esto te permitiría especificar un token en la cadena de conexión que sería reemplazado por el nombre correcto de la base de datos durante el proceso de implementación. Esto eliminaría la necesidad de actualizar manualmente el archivo appsettings cada vez que se publica la aplicación. Visual Studio tiene soporte incorporado para las transformaciones de archivos de configuración que se pueden utilizar para lograr esto.

    Para utilizar las transformaciones de archivos de configuración, crearías un archivo appsettings.production.json separado con la cadena de conexión que contiene un token (por ejemplo, “{databaseName}”). Luego, crearías un archivo de transformación llamado appsettings.production.transform.json que contiene el valor de reemplazo para el token (por ejemplo, “softwareCensus”). Durante el proceso de implementación, Visual Studio utilizaría automáticamente el archivo de transformación para reemplazar el token por el valor correcto en el archivo appsettings.production.json publicado.

    Para configurar esto, haz clic derecho en tu archivo appsettings.production.json y selecciona “Agregar transformación de configuración”. Esto creará un nuevo archivo de transformación que podrás editar. En el archivo de transformación, puedes especificar el valor que se reemplazará en lugar del token utilizando la siguiente sintaxis:

    {
      "ConnectionStrings": {
        "DefaultConnection": "Server=myServer;Database=#{databaseName}#;Trusted_Connection=True;"
      }
    }
    

    En este ejemplo, el token es “# {databaseName} #” y será reemplazado por el valor especificado en el archivo de transformación.

    Una vez que hayas configurado esto, puedes publicar tu aplicación como de costumbre y la transformación debería reemplazar automáticamente el token por el nombre correcto de la base de datos para el entorno.

Comments are closed.