【问题标题】:How to read and write files with Flask with Ubuntu and apache server如何使用 Flask 和 Ubuntu 和 apache 服务器读取和写入文件
【发布时间】:2017-04-10 17:23:10
【问题描述】:

我正在尝试部署一个使用 Flask 写入和读取 png 图像的应用程序。在本地我可以毫无错误地运行我的脚本,除非我在我的服务器上运行它。

我在 DigitalOcean 上使用此 guide 进行了部署。它使用 apache、wsgi 和 virtualenv。

这是我的代码示例:

from flask import Flask
from flask import send_file
from PIL import Image

app = Flask(__name__)

@app.route("/")
def hello():
    img = Image.new('RGB', (200, 100), (255, 255, 255))
    img.save('output.png')
    return send_file('output.png', mimetype='image/png')

if __name__ == "__main__":
    app.run()

我发现导致问题的原因是img.save('output.png') 我还发现如果我尝试加载类似font = ImageFont.truetype("Archive.otf", 60) 的字体,它也不起作用。我的 .png 和 .otf 文件与 __init__.py 位于同一文件夹中

我想我弄乱了 apache 的配置或目录路径。如果我在烧瓶环境之外运行img.save,它可以工作,所以库或依赖项没有问题。

【问题讨论】:

  • 你还没有说真正的问题是什么。
  • 如果你像img.save("/srv/my/server/path/output.png")一样提供img.save的绝对路径会发生什么(当然,对应的目录应该存在并且你的Apache必须有足够的权限才能写在那里)?
  • 我发现主要问题是apache或python没有写入和读取文件的权限。我试图弄清楚如何做到这一点,但还没有成功。

标签: python apache flask virtualenv wsgi


【解决方案1】:

您需要使用绝对路径,例如/var/www/somedir/somefile。这是因为 Apache 下的 Flask 并没有给 Python 一个可用的工作目录。我建议使路径可配置。

【讨论】:

  • 我只设法将文件保存在 /tmp 中,我想我需要赋予 apache/python 读写文件的权限,但我也遇到了麻烦。
  • 您需要确保 Apache 用户对您尝试使用的目录具有读/写权限。
猜你喜欢
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2015-04-10
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 2012-09-15
相关资源
最近更新 更多