Nginx Gunicorn Dash (Flask) App 似乎在某处缓存结果(哪里??)

Nginx Gunicon Dash (Flask) App seems to cache results somewhere (where??)

我在 Google 虚拟机 运行 Ubuntu 18.04 上设置了一个 dash 应用程序来可视化 development of COVID-19 Infections in Germany 随着时间的推移。

该应用基于三个 docker 容器:

  1. 应用程序本身由 gunicorn 提供服务(在端口 5000 上)
  2. NGINX 容器(从 80 -> 443 -> 5000 进行转换)
  3. Certbot 容器(用于获取和更新 SSL 证书)

现在我的问题是,无论我做什么,我得到的应用程序都是一个相当过时的应用程序版本(数据与我第一次部署它时完全一样。直到 3 月 28 日)。我尝试更改源数据以包含更新的数据,但也包含较少的数据,但没有看到任何变化。我还尝试更改 proxy_buffers、proxy_buffer_size、proxy_buffering 周围的 Nginx 设置,但无济于事。

这让我相信我得到的是缓存应用程序。我尝试了不同的 browser/machines/devices 这让我相信缓存发生在服务器端。

就此而言,我对 Nginx、Gunicorn 或 Dash 不是很熟悉。但是我觉得很奇怪的是,结果好像是兑现了,甚至在多次docker-compose updown之后。

我在这里错过了什么?

查找存储库 here:

基于以下 docker-compose 文件:

version: '3.7'

services:
  web:
    build: ./services/web
    command: gunicorn --bind 0.0.0.0:5000 wsgi:app
    expose:
      - 5000

  nginx:
    image: nginx:1.17-alpine
    restart: unless-stopped
    volumes:
      - ./data/nginx:/etc/nginx/conf.d
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - web
    command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"

  certbot:
    image: certbot/certbot
    restart: unless-stopped
    volumes:
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"

可能是因为网络 Dockerfile 运行 COPY 命令复制整个目录,包括 data.csv.

因此,如果您在主机上的那个目录中放置一个新的 data.csv,它只会在您执行 docker-compose build.

时被复制到映像中

您可以通过向 web 服务添加一个卷装载来解决此问题,并将 data.csv 放在那里,允许您更新主机上的该文件,然后发出 docker-compose restart web.

为避免必须发出重启命令,您可能需要更改 this part 的编码方式:

def load_data():
    global data
    _ = pd.read_csv(os.path.join(os.path.dirname(__file__), '../data.csv'))
    return _

data = load_data()

如果您需要进一步的建议,请告诉我。