簡體   English   中英

Google Cloud Run 不加載 .env 文件

[英]Google Cloud Run does not load .env file

我花了最后幾天試圖找出我做錯了什么,但我仍然無法弄清楚,因為我能夠使用flask run在本地運行應用程序,並且還使用 Docker 使用docker-compose up --build 源代碼在這里

我的問題是我的 Cloud Run 部署成功,但單擊URL時服務不可用。 我檢查了日志,似乎我的環境變量沒有正確加載:

line 7, in <module> from web_messaging.blueprints.user import user File 
"/web_messaging/web_messaging/blueprints/user/__init__.py", line 1, in <module> from 
web_messaging.blueprints.user.views import user File 
"/web_messaging/web_messaging/blueprints/user/views.py", line 3, in <module> from 
web_messaging.extensions import mongo, login_manager, c, bc File 
"/web_messaging/web_messaging/extensions.py", line 18, in <module> twilio_client = Client(TWILIO_SID,
TWILIO_TOKEN) File "/usr/local/lib/python3.9/site-packages/twilio/rest/__init__.py", line 54, in __init__
raise TwilioException("Credentials are required to create a TwilioClient") 
twilio.base.exceptions.TwilioException: Credentials are required to create a TwilioClient    

我有一個config/.env文件和一個config/settings.py 我正在使用config/settings.py上的load_dotenv().env加載環境變量。 我決定在我的config/settings.py中添加一些 print 和 try/expect 語句來查看變量的值。

設置.py

import os
from dotenv import load_dotenv
BASEDIR = os.path.abspath(os.path.dirname(__file__))

try:
    load_dotenv(os.path.join(BASEDIR, '.env'))
    print("OK")
    print(BASEDIR)
except Exception as e:
    print(str(e))

# Mongo Database
MONGO_URI = os.getenv('MONGO_URI')
TWILIO_SID = os.getenv('TWILIO_SID')
TWILIO_TOKEN = os.getenv('TWILIO_TOKEN')
print(MONGO_URI)
print(TWILIO_SID)

當我使用 flask 運行時,docker-compose 或雲運行:

  • BASEDIR值為/web_messaging/config
  • load_dotenv()調用期間沒有異常

但是,有一個主要區別,它是我的環境變量的值,例如MONGO_URITWILIO_SID 這些變量在使用flask rundocker-compose時具有正確的值,但在 Cloud Run 日志中卻沒有。 在 Cloud Run 上,這些變量等於None

當我不使用.env並直接將變量的值放入/config/settings.py時,沒有問題並且我的 Cloud Run 鏈接正常工作。 我還嘗試將.env移到配置文件之外和其他幾個位置,但我仍然遇到同樣的問題。

.
├── requirements.txt
├── Dockerfile
├── Docker-compose.yml
├── config    
│   ├── .env                           
│   ├── settings.py            
│   ├── gunicorn.py 
│   └── __init__.py 
├── web_messaging                   
│   ├── app.py      # where I am calling create_app() - factory pattern         
│   ├── blueprints              
│   ├── static                     
│   └── ...                 
└── ...

Dockerfile

FROM python:3.9-slim

ENV INSTALL_PATH /web_messaging
RUN mkdir -p $INSTALL_PATH

WORKDIR $INSTALL_PATH

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

CMD gunicorn -b 0.0.0.0:8080 --access-logfile - "web_messaging.app:create_app()"

docker-compose.yml

version: '2'

services:
  website:
    build: .
    command: >
      gunicorn -b 0.0.0.0:8080
        --access-logfile -
        --reload
        "web_messaging.app:create_app()"
    environment:
      PYTHONUNBUFFERED: 'true'
    volumes:
      - '.:/web_messaging'
    ports:
      - '8080:8080'

配置/.env

COMPOSE_PROJECT_NAME=web_messaging
FLASK_SECRET=xxx
MONGO_URI=mongodb+srv://xxx
MONGO_DB=xxx
TWILIO_SID=xxx
TWILIO_TOKEN=xxx 

配置/設置.py

import os
from dotenv import load_dotenv
BASEDIR = os.path.abspath(os.path.dirname(__file__))


load_dotenv(os.path.join(BASEDIR, '.env'))

DEBUG = True
PYTHONDONTWRITEBYTECODE=1
#SERVER_NAME = '127.0.0.1:5000'


# Mongo Database
MONGO_DBNAME = os.getenv('MONGO_DB')
MONGO_URI = os.getenv('MONGO_URI')


# Twilio API 
FLASK_SECRET = os.getenv('FLASK_SECRET')
TWILIO_SID = os.getenv('TWILIO_SID')
TWILIO_TOKEN = os.getenv('TWILIO_TOKEN')
                                    

配置/gunicorn.py

bind = '0.0.0.0:8080'
accesslog = '-'
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" in %(D)sµs'
                              

已修復,我確切地發現出了什么問題,但我不知道為什么。

  • 當我之前構建自己的圖像以將圖像推送到 GCP 容器注冊表中時,它起作用了:

     docker-compose up --build docker tag 52e6159b6b13 gcr.io/mousset005/zoro gcloud auth configure-docker docker push gcr.io/mousset005/zoro

但是,我正在做的是使用 GCP API(這是他們在 Cloud Run Python 快速入門中推薦的)使用該命令構建我的圖像:

gcloud run deploy --image gcr.io/mousset005/zoro --platform managed

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM