Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask项目在本地环境中工作,在heroku上抛出关于丢失文件的奇怪错误(无论如何都是动态添加的!)_Python_Python 2.7_Heroku_Flask - Fatal编程技术网

Python Flask项目在本地环境中工作,在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

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

该应用程序从api中提取图像,并将其存储在服务器*上的tmp目录中,在该目录中对图像进行编辑。tmp目录是gitrepo的一部分,每次加载页面时都应该从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' 
“我的视图”文件中的相关行包括:

@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必须在上述提交时碰巧清除,这使我认为这是有问题的提交。无论如何,谢谢你!