Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

442
Views
Google Cloud Django si os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine'): no funciona

Estoy trabajando en un proyecto Django de Google Cloud.

Estoy tratando de verificar en settings.py si estoy ejecutando en modo Desarrollo o Producción.

Agregué el siguiente bloque de código para probar si el SOFTWARE donde se ejecuta el programa está en mi máquina o en los servidores de Google Cloud.

 # | settings.py | if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine'): #code to execute in production else: #code to execute in development

Me di cuenta de que la declaración if siempre es falsa , así que decidí depurar el os.environ . El resultado de la depuración es que el valor de la clave SERVER_SOFTWARE del entorno es igual a gunicorn/20.1.0 .

Como está escrito en la respuesta correcta de esta pregunta de stackoverflow , cuando se ejecuta en producción (es decir, en Google Cloud Severs App Engine), el valor de SERVER_SOFTWARE debe ser Google App Engine/XYZ , donde X, Y y Z representan la versión de Google Cloud. Pero, como dije, mi valor, cuando se ejecuta en App Engine, no es así, es gunicorn/20.1.0 .

Entonces, ¿cómo hago para que el programa sepa si estoy en desarrollo o en producción?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Desafortunadamente, la respuesta de desbordamiento de pila (SO) a la que se vinculó tiene casi doce años y se refiere a Python 2 (obsoleto). No pude encontrar el entorno predeterminado SYSTEM_SOFTWARE . variedad tanto para Google Cloud Platform (GCP) App Engine Standard ( aquí ) como para el entorno flexible ( aquí ).

Es seguro decir que el env. variedad que App Engine inyecta en cada instancia estándar de forma predeterminada puede cambiar. En cambio, ¿por qué no proporciona un env. variedad en su entorno estándar de App Engine. archivo de configuración ( app.yaml ) para asegurarse de que su aplicación Django se esté ejecutando en "producción" solo cuando usted lo desee:

  1. Agrega la sección env_variables a app.yaml , como:

     . . . env_variables: DJANGO_PRODUCTION_ENVIRONMENT: true . . .

    o:

     . . . env_variables: DJANGO_SYSTEM_SOFTWARE: "production" . . .

    Puedes buscar más env estándar de App Engine. configuración ajustes aquí .

  2. Implemente su aplicación Django en el entorno estándar de App Engine. con el SDK de GCP Cloud ( gcloud ):

     gcloud app deploy --appyaml=./app.yaml

Confirme que las versiones anteriores (p. ej., $AES_OLD_VERSION ) se han detenido con:

 gcloud app versions list \ --format="table[box=true](version.id:label=ID, version.servingStatus:label=STATUS)" \ --service=$AES_SERVICE_ID ┌──────────────────┬─────────┐ │ ID │ STATUS │ ├──────────────────┼─────────┤ │ . . . │ . . . │ │ $AES_OLD_VERSION │ STOPPED │ │ $AES_VERSION_ID │ SERVING │ └──────────────────┴─────────┘

Confirme que su env. variedad lo han convertido en $AES_VERSION_ID con:

 gcloud app versions describe $AES_VERSION_ID \ --format="yaml(envVariables)" \ --service=$AES_SERVICE_ID #=> envVariables: DJANGO_PRODUCTION_ENVIRONMENT: 'True' DJANGO_SYSTEM_SOFTWARE: production
over 4 years ago · Santiago Trujillo Report

0

Voy a presentar un par de otras soluciones.

(1) GAE proporcionó env vars

GAE establece automáticamente las variables de entorno que probablemente no establezca cuando se ejecuta localmente. Yo uso esto:

 version = os.environ.get('GAE_VERSION', 'local')

Obtendrá la versión real en producción y 'local' en su máquina.

(2) Verifique la URL de la solicitud

Esto es Flask pero debe haber algo similar en Django:

 request.url_root == 'http://localhost:8080/'
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!