首页 > 解决方案 > 如何在 Droplet Digital Ocean 上使用 Flask 和 Nginx 更改 HTML 内容?

问题描述

基本上,我已逐步遵循本指南https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04和现在我可以完美地看到我的网站 www.XXX.com 并带有“Hello There”文本。

第一个问题是,无论我如何更改“返回”的文件,我都会看到文本“Hello There”。我也尝试过多次重启nginx,但它不起作用。

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    #line that I usually try to edit, but nothing happens...
    return "<h1 style='color:blue'>Hello There!</h1>"

if __name__ == "__main__":
    app.run(host='0.0.0.0')

此外,本教程没有解释将文件夹“静态”和“模板”放在哪里以便让它们通过 Flask 进行通信。我已经阅读了很多关于更改 nginx conf 文件和/或重定向的内容,我正在尝试我看到的每个教程几乎一个星期,但到目前为止没有任何效果。

我怎样才能改变html?我应该在哪里写一个 index.html 以便 Flask 可以实际看到它并且“index.html”可以对其进行 POST 请求?在 localhost 中,一切看起来都不同,因为有模板文件夹。但这里似乎并不在意。

谢谢!

标签: pythonnginxpostflask

解决方案


默认情况下,uWSGI 不会重新加载 python 代码。您必须在更改代码时手动重新启动或重新加载 uWSGI,或者将 uWSGI 配置为自动重新加载。uWSGI 有许多可以使用的配置选项。

对于开发,您可以使用该--python-autoreload选项。这将在每次代码更改时重新加载,类似于 django runserver。此选项存在性能成本,因此不应在生产中使用。选项可以是命令行标志或包含在 uwsgi 配置文件中。

[uwsgi]
module = wsgi:app
python-autoreload = true
...

在生产中,还有许多其他方法可以重新加载应用程序。最简单的可能是向SIGHUPuwsgi 进程发送一个信号。例如使用 linux 命令pkill

pkill --signal SIGHUP uwsgi

另一种选择是使用touch-reload. 如果文件被修改,它将只监视单个文件的更改并重新加载 uWSGI。所以这可以在没有太多开销的情况下用于生产。

[uwsgi]
module = wsgi:app
touch-reload = /tmp/somefile
...

使用命令touch /tmp/somefile更新文件时间戳。

uWSGI 文档的这一部分描述了其他几种配置重新加载的方法:优雅重新加载的艺术


推荐阅读