Así que

  1. Estoy usando NUXT
  2. Estoy implementando en Google Cloud Run
  3. Estoy usando el paquete dotenv con un archivo .env en desarrollo y funciona bien.

Uso el comando process.env.VARIABLE_NAME dentro de mi servidor de desarrollo en Nuxt y funciona muy bien, me aseguro de que .env esté en git ignore para que no se cargue.

Sin embargo, luego implemento mi aplicación usando la ejecución de Google Cloud ... Me aseguro de ir a la pestaña de Medio Ambiente y agregar exactamente las mismas variables que están dentro del archivo .env.

enter image description here

Sin embargo, las variables vuelven como "INDEFINIDAS".

He intentado todo tipo de formas de solucionar esto, pero la única manera que puedo es subir mi .env con el proyecto, lo que no deseo hacer ya que NUXT expone este archivo en el lado del cliente js.

¿Alguien se encuentra con este problema y sabe cómo solucionarlo?

DOCKERFILE:

# base node image
FROM node:10

WORKDIR /user/src/app

ENV PORT 8080
ENV HOST 0.0.0.0

COPY package*.json ./

RUN npm install

# Copy local nuxt code to the container
COPY . .

# Build production app
RUN npm run build

# Start the service
CMD npm start

Saludos cordiales, Josh

0
Josh90 3 jun. 2020 a las 22:58

2 respuestas

La mejor respuesta

Finalmente encontré una solución.

Estaba usando Nuxt v1.11.x. Desde una versión igual o superior a 1.13, Nuxt viene con configuraciones de tiempo de ejecución, y esto es lo que necesita.

En tu nuxt.config.js:

export default {
    publicRuntimeConfig: {
       BASE_URL: 'some'
    },
    privateRuntimeConfig: {
       TOKEN: 'some'
    }
}

Entonces, puedes acceder como:


this.$config.BASE_URL || context.$config.TOKEN

Más detalles aquí

2
Ageu Matheus 1 jul. 2020 a las 19:08

Para insertar valor en las variables de entorno no es necesario hacerlo en el Dockerfile. Puede hacerlo a través de la línea de comando en el momento de la implementación.

Por ejemplo, aquí está el Dockerfile que utilicé.

FROM node:10

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

CMD ["npm","start"]

Este es el archivo app.js

    const express = require('express')
    const app = express()
    const port = 8080

    app.get('/',(req,res) => {
        const envtest = process.env.ENV_TEST;
        res.json({message: 'Hello world',
                  envtest});
    });

app.listen(port, () => console.log(`Example app listening on port ${port}`))

Para implementar, use un script como este:

gcloud run deploy [SERVICE] --image gcr.io/[PROJECT-ID]/[IMAGE] --update-env-vars ENV_TEST=TESTVARIABLE

Y la salida será como la siguiente:

{"message":"Hello world","envtest":"TESTVARIABLE"}

Puede consultar más detalles en la documentación oficial: https://cloud.google.com/run/docs/ configurando / ambiente-variables # línea de comando

0
Enrique Del Valle 11 jun. 2020 a las 18:17