Python Flask项目在本地环境中工作,在heroku上抛出关于丢失文件的奇怪错误(无论如何都是动态添加的!)
我正在开发一个用于图像编辑的flask应用程序,直到有几个人提交,它在我的本地环境和heroku上都工作得很好。我做了一个小小的改变,现在我看到了一个奇怪的错误。是的,回滚修复了错误,但基于我所做的更改,我无法解释为什么heroku会给我带来麻烦 该应用程序从api中提取图像,并将其存储在服务器*上的tmp目录中,在该目录中对图像进行编辑。tmp目录是gitrepo的一部分,每次加载页面时都应该从api中提取图像。我现在在heroku上遇到的错误是:Python Flask项目在本地环境中工作,在heroku上抛出关于丢失文件的奇怪错误(无论如何都是动态添加的!),python,python-2.7,heroku,flask,Python,Python 2.7,Heroku,Flask,我正在开发一个用于图像编辑的flask应用程序,直到有几个人提交,它在我的本地环境和heroku上都工作得很好。我做了一个小小的改变,现在我看到了一个奇怪的错误。是的,回滚修复了错误,但基于我所做的更改,我无法解释为什么heroku会给我带来麻烦 该应用程序从api中提取图像,并将其存储在服务器*上的tmp目录中,在该目录中对图像进行编辑。tmp目录是gitrepo的一部分,每次加载页面时都应该从api中提取图像。我现在在heroku上遇到的错误是: File "/app/app/views.p
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'
“我的视图”文件中的相关行包括:
@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 commit和下一个破坏东西的git commit,下面是提交的全部内容:
Choose Font
已添加到Jinja2模板中,@cache.cached(timeout=50)
已从视图中删除,并且“默认值”:“/ttf bitstream vera/vera.ttf”,已添加到字典中
还有几个注意事项:
- 我试图调出错误消息中列出的图像,结果显示
实际上,在heroku的例子中确实出现了李>
- 我想也许我是
混淆了提交,并查看了在提交之前的最后几次
思想是工作的承诺,而接下来的几次则是破碎的承诺
犯罪我看不到任何会让heroku失败的事情,
不是我当地的环境
- 一、 可能很愚蠢,继续在我的本地环境中开发应用程序。我还没有完成登录应用程序的编码,所以heroku上出现了500个错误,我认为这是侥幸。现在,我比heroku部署提前了十几次提交,并且已经发生了很多变化,包括那些破坏了所有内容的提交,它们被完全删除,以获得更好的用户体验李>
- 当地的情况仍然很好
- tmp目录上的权限未更改
我是heroku的新手,这是我在那里部署的第一个应用程序。也许我错过了什么,这就是我来找你的原因!如有任何建议,将不胜感激
*我知道heroku不希望像这样的东西存储在本地,我正在重写视图以使用S3…你可以在dirn在第一篇文章上留下的评论中了解更多关于我的答案,但基本上我的目录并没有像我想的那样包含在我的git repo中,所以在它被清除后就不在heroku dyno上了。我在my views.py中添加了一个条件,用于检查目录,并在目录不存在时创建它,从而修复了问题:
if not os.path.exists(MEDIA_FOLDER):
os.makedirs(MEDIA_FOLDER)
Heroku dynos是短暂的。最终它们将消失,并被新的替代。它们也不共享文件系统。这意味着任何保存在dyno文件系统中的文件都只对特定的dyno可用,并且在关闭时会丢失。对,我理解这一点。这就是为什么每次加载特定页面时都会将这些图像拉入系统。tmp目录是git repo的一部分,因此应该保持不变。应用程序正在生成这些文件,所以它们不应该被认为是丢失的。@dirn你的评论让我对我的git repo三思。我在我的视图中添加了一个条件,检查tmp目录,如果它不存在,就创建它。确实如此,tmp文件夹可能已经包含在以前的提交中,但我将其删除了几次,并且heroku dyno必须在上述提交时碰巧清除,这使我认为这是有问题的提交。无论如何,谢谢你!