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 容器:
- 应用程序本身由 gunicorn 提供服务(在端口 5000 上)
- NGINX 容器(从 80 -> 443 -> 5000 进行转换)
- Certbot 容器(用于获取和更新 SSL 证书)
现在我的问题是,无论我做什么,我得到的应用程序都是一个相当过时的应用程序版本(数据与我第一次部署它时完全一样。直到 3 月 28 日)。我尝试更改源数据以包含更新的数据,但也包含较少的数据,但没有看到任何变化。我还尝试更改 proxy_buffers、proxy_buffer_size、proxy_buffering 周围的 Nginx 设置,但无济于事。
这让我相信我得到的是缓存应用程序。我尝试了不同的 browser/machines/devices 这让我相信缓存发生在服务器端。
就此而言,我对 Nginx、Gunicorn 或 Dash 不是很熟悉。但是我觉得很奇怪的是,结果好像是兑现了,甚至在多次docker-compose up
和down
之后。
我在这里错过了什么?
查找存储库 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()
如果您需要进一步的建议,请告诉我。
我在 Google 虚拟机 运行 Ubuntu 18.04 上设置了一个 dash 应用程序来可视化 development of COVID-19 Infections in Germany 随着时间的推移。
该应用基于三个 docker 容器:
- 应用程序本身由 gunicorn 提供服务(在端口 5000 上)
- NGINX 容器(从 80 -> 443 -> 5000 进行转换)
- Certbot 容器(用于获取和更新 SSL 证书)
现在我的问题是,无论我做什么,我得到的应用程序都是一个相当过时的应用程序版本(数据与我第一次部署它时完全一样。直到 3 月 28 日)。我尝试更改源数据以包含更新的数据,但也包含较少的数据,但没有看到任何变化。我还尝试更改 proxy_buffers、proxy_buffer_size、proxy_buffering 周围的 Nginx 设置,但无济于事。
这让我相信我得到的是缓存应用程序。我尝试了不同的 browser/machines/devices 这让我相信缓存发生在服务器端。
就此而言,我对 Nginx、Gunicorn 或 Dash 不是很熟悉。但是我觉得很奇怪的是,结果好像是兑现了,甚至在多次docker-compose up
和down
之后。
我在这里错过了什么?
查找存储库 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()
如果您需要进一步的建议,请告诉我。