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:
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.
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ónRevelar variables de configuración
. Aquí podemos agregar la variable de entorno llamadaGOOGLE_APPLICATION_CREDENTIALS
con el valor igual al contenido del archivogoogle-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 archivocontrollers/users.go
:a:
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 paqueteos
. De esta manera, podemos cambiar fácilmente la ruta del archivo sin cambiar el código.