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.

Heroku no está leyendo las credenciales de Firestore.

Estoy trabajando en un proyecto donde estoy utilizando el marco de trabajo Gin para el desarrollo de una API, y Firestore como base de datos. En el entorno local, todo funciona bien y puedo realizar operaciones CRUD. Cuando desplegué la API en Heroku, pude ver en los registros que se construyó correctamente y la aplicación se implementó. Sin embargo, cuando intento acceder a la aplicación, recibo el error "Error en la aplicación". Esto se debe a que Heroku no está leyendo mis credenciales de Firestore desde el archivo google-credentials.json. No puedo subir el archivo google-credentials.json ya que contiene mis credenciales. Para el entorno local, estoy leyéndolo especificando la ruta local del archivo.

controllers/users.go

var firestoreCredentialsLocation = "A:/Go/API_Gin/google-credentials.json"     //ruta local del archivo</p>

<p>func GetUses(c *gin.Context) {</p>

<pre><code>// Use una cuenta de servicio
ctx := context.Background()
sa := option.WithCredentialsFile(firestoreCredentialsLocation)
app, err := firebase.NewApp(ctx, nil, sa)
if err != nil {
    log.Fatalln(err)
}

client, err := app.Firestore(ctx)
if err != nil {
    log.Fatalln(err)
}
defer client.Close()

blah blah..........
blah blah..........
blah blah..........

}

c.IndentedJSON(http.StatusOK, gin.H{
    "message": "Usuarios devueltos con éxito!",
})
</code></pre>

<p>}

Error después de hacer clic en la URL:

error

Registros:

registros

¿Podrían indicarme cómo resolver este problema? ¿Qué debo hacer para que Heroku lea mis credenciales de la base de datos y pueda implementar la aplicación exitosamente? También, ¿es una buena práctica especificar la ruta de un archivo JSON?
Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución:

    Cuando implementamos una aplicación en Heroku, necesitamos establecer variables de entorno para credenciales o cualquier otra información sensible. No podemos cargar el archivo google-credentials.json directamente en Heroku ya que no es una forma segura de almacenar información sensible.

    Podemos establecer variables de entorno en Heroku yendo a la pestaña Configuración en el panel de control de Heroku y haciendo clic en el botón Revelar variables de configuración. Aquí podemos agregar la variable de entorno llamada GOOGLE_APPLICATION_CREDENTIALS con el valor igual al contenido del archivo google-credentials.json.

    Para leer el valor de esta variable de entorno en nuestro código, podemos usar el paquete os. Necesitamos cambiar la siguiente línea en nuestro archivo controllers/users.go:

    sa := option.WithCredentialsFile(firestoreCredentialsLocation)
    

    a:

    sa := option.WithCredentialsJSON([]byte(os.Getenv("GOOGLE_APPLICATION_CREDENTIALS")))
    

    Esto leerá el valor de la variable de entorno GOOGLE_APPLICATION_CREDENTIALS y lo usará para autenticar el cliente de Firestore.

    En cuanto a proporcionar la ruta de un archivo .json, no es una buena práctica codificar la ruta del archivo en el código. En su lugar, podemos establecer una variable de entorno para la ruta del archivo y leerlo en nuestro código utilizando el paquete os. De esta manera, podemos cambiar fácilmente la ruta del archivo sin cambiar el código.

Comments are closed.