python - 如何在 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 中,一切看起来都不同,因为有模板文件夹。但这里似乎并不在意。
谢谢!
解决方案
默认情况下,uWSGI 不会重新加载 python 代码。您必须在更改代码时手动重新启动或重新加载 uWSGI,或者将 uWSGI 配置为自动重新加载。uWSGI 有许多可以使用的配置选项。
对于开发,您可以使用该--python-autoreload
选项。这将在每次代码更改时重新加载,类似于 django runserver。此选项存在性能成本,因此不应在生产中使用。选项可以是命令行标志或包含在 uwsgi 配置文件中。
[uwsgi]
module = wsgi:app
python-autoreload = true
...
在生产中,还有许多其他方法可以重新加载应用程序。最简单的可能是向SIGHUP
uwsgi 进程发送一个信号。例如使用 linux 命令pkill
pkill --signal SIGHUP uwsgi
另一种选择是使用touch-reload
. 如果文件被修改,它将只监视单个文件的更改并重新加载 uWSGI。所以这可以在没有太多开销的情况下用于生产。
[uwsgi]
module = wsgi:app
touch-reload = /tmp/somefile
...
使用命令touch /tmp/somefile
更新文件时间戳。
uWSGI 文档的这一部分描述了其他几种配置重新加载的方法:优雅重新加载的艺术
推荐阅读
- android - 在路径上找不到类“androidx.multidex.MultiDexApplication”:DexPathList on lower API <= 19 devices
- python - 将 TCP 服务器和 DASH 组合为线程给出“无属性 Dash”
- python - 两个表单,两个视图,一页 Django - 只显示一个表单
- java - 最大化外部 IO 绑定应用程序 (JVM) 的并发性
- python-3.x - 我应该使用字典来存储非零像素的位置吗?
- python - 在单个数据框中显示所有匹配对 - Python Record Linkage
- asp.net-web-api - 当控制器使用错误的返回类型时,有没有办法发出警告
- java - 为 BigDecimal 设置比例和舍入后舍入必要的异常
- magento2 - 将 Magento1 管理员用户导入 Magento2
- azure-media-services - 如何使用 azure 函数和事件订阅来监听 mediaService 事件