python - Flask 项目在本地环境中工作,在 Heroku 上抛出关于丢失文件的奇怪错误(无论如何都是动态添加的!)

标签 python python-2.7 heroku flask

我正在开发一个用于图像编辑的 Flask 应用程序,直到几次提交为止,它在我的本地环境和 Heroku 上都运行得很好。我做了一个微小的更改,现在我看到了一个奇怪的错误。是的,回滚修复了错误,但根据我所做的更改,我无法解释为什么 heroku 会给我带来麻烦。

该应用程序从 api 提取图像并将其存储在服务器*上的 tmp 目录中,在该目录中对图像进行编辑。 tmp 目录是 git 存储库的一部分,每次加载页面时都应从 api 中提取图像。我现在在heroku上遇到的错误是:

File "/app/app/views.py", line 71, in edit_result 
Jan 17 22:05:23 *** app/web.1:      i.save('%s/%s' % (MEDIA_FOLDER, filename)) 
Jan 17 22:05:23 *** app/web.1:    File "/app/.heroku/python/lib/python2.7/site-packages/PIL/Image.py", line 1459, in save 
Jan 17 22:05:23 *** app/web.1:      fp = builtins.open(fp, "wb") 
Jan 17 22:05:23 *** app/web.1:  IOError: [Errno 2] No such file or directory: u'/app/tmp/5cfae63a182ff935fe0fb142_640.jpg' 

我的 View 文件中的相关行是:

@app.route('/edit/', methods = ['GET', 'POST'])
def edit_result():
        url = request.args.get('url')
        filename = url.split('/')[-1]

        i = Image.open(StringIO(requests.get(url).content))
        i.save('%s/%s' % (MEDIA_FOLDER, filename))

        return render_template("edit.html",
            image_filename=filename,
        )

看看工作中的 git 提交与下一个破坏的东西,这就是所有提交的内容: <option value="Default">Choose Font</option>已添加到 Jinja2 模板中,@cache.cached(timeout=50)已从 View 中删除并且 "Default": "/ttf-bitstream-vera/Vera.ttf",已添加到字典中

还有一些注意事项:

  • 我尝试提取错误消息中列出的图像,但它 实际上确实出现在heroku实例上。
  • 我想也许我是 混淆了提交并查看了我之前的最后几个 思想是工作提交,接下来的几个是 splinter 的 犯罪。我看不出有什么会导致 heroku 失败, 不是我本地的环境。
  • 我(可能很愚蠢)继续在本地环境中开发该应用程序。我还没有完成登录应用程序的编码,所以我在 Heroku 上收到错误 500,并认为这是侥幸。现在,我在 Heroku 部署之前进行了十几次提交,并且发生了很多变化,包括那些为了更好的用户体验而完全删除的破坏的提交。
  • 本地一切仍然运行良好。
  • tmp 目录的权限未更改

我是 Heroku 新手,这是我在那里部署的第一个应用程序。也许我错过了一些东西,这就是我来找你的原因!任何建议将不胜感激。

*我知道 Heroku 不希望这样的东西存储在本地,我正在重写 View 以使用 S3...

最佳答案

您可以在第一篇文章中 dirn 留下的评论中阅读有关我的答案的更多信息,但本质上我的目录没有像我想象的那样包含在我的 git 存储库中,因此在清除后它不在 heroku dyno 上。我在 view.py 中添加了一个条件来检查目录,如果不存在则创建它,这解决了问题:

if not os.path.exists(MEDIA_FOLDER):
    os.makedirs(MEDIA_FOLDER)

关于python - Flask 项目在本地环境中工作,在 Heroku 上抛出关于丢失文件的奇怪错误(无论如何都是动态添加的!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21205465/

相关文章:

python - 连接 Python 中 re.findall 找到的字符串

python - BeautifulSoup 网络抓取...仅获取文本

python-2.7 - Scrapy 从 unicode 转换为 utf-8

ubuntu - 无法在 Ubuntu 12.04 LTS 上安装 heroku

heroku - 我的 Godeps.json 是否正确生成?

node.js - Godaddy 转发到 Heroku 会导致 SSL 问题

python - Spark MinMaxScaler 在数据帧上

python - 使用分组依据并创建 CSV

python - 使用同一模型创建两个不同的表

python - 日志模块在文件的同一行上打印日志