Heroku运行脚本写入tmp文件夹后查看不到文件是什么原因?
问题原因
你观察到的现象是Heroku的dyno隔离机制导致的,和账号是否付费、目录权限没有任何关系:
- 每次执行
heroku run命令,Heroku都会启动一个独立的一次性dyno实例,不同heroku run触发的dyno文件系统完全隔离,互不共享。你第一次运行脚本的dyno在任务执行完成后就被销毁了,第二次执行heroku run bash启动的是全新的空白dyno,自然看不到前一个实例写入的文件。 - Heroku所有类型的dyno默认都开放
tmp目录的写入权限,免费账号也可正常使用,不需要额外执行chmod修改权限。 - 额外注意:即便是长期运行的dyno(如Web服务进程所在的dyno),本地文件系统的内容也非持久化:dyno每24小时会自动滚动重启,每次代码部署、手动重启dyno时,所有本地存储的文件(包括
tmp目录下的内容)都会被清空,所以不能将dyno本地文件系统作为持久化存储方案使用。
验证方法
如果要确认文件写入逻辑正常,将写文件和读文件操作放在同一个heroku run会话即可:
- 直接组合命令执行:
heroku run "python createfile.py && ls tmp"
- 或者先执行
heroku run bash进入交互式会话后,在同一个窗口内依次执行python createfile.py和ls tmp,就能看到生成的df.txt文件。
持久化方案建议
如果你需要长期保存生成的文件,需要对接外部对象存储服务,将生成的文件上传到外部存储后才能跨dyno访问、长期留存。
内容的提问来源于stack exchange,提问作者python1259
相关产品推荐
相关产品推荐

