【问题标题】:Cannot save file in 'tmp' folder无法将文件保存在“tmp”文件夹中
【发布时间】:2021-10-13 21:02:51
【问题描述】:

这是我第一次使用 Heroku,它是临时文件系统。我有一个 python 脚本,它需要一个临时文件夹来在脚本运行时写入一些文件。

我首先做了什么:按照这个逻辑在我的 heroku 根文件夹中创建一个 'tmp' 文件夹:

mkdir tmp
touch tmp/.keep
git add tmp/.keep
git commit -m "Add tmp directory to app repository."

我还创建了一个简单的 python 脚本来将数据框存储到文本文件中:

import pandas as pd
df = pd.DataFrame( {'Name': {0: 'John', 1: 'Luc', 2: 'Steph'}, 'Gender': {0: 'Male', 1: 'Male', 2: 'Female'}, 'Age': {0: 55, 1: 47, 2: 20}} )
df.to_csv('tmp/df.txt')

在 Heroku CLI 中,我使用以下命令运行该脚本:

heroku run python createfile.py

脚本运行后,我使用 bash 转到“tmp”文件夹:

heroku run bash
cd tmp
ls

但文件夹是空的,而我希望 df.txt 在那里。 有没有我遗漏的步骤?还是我需要一个付费 Heroku 帐户才能写入 tmp 文件夹?我必须先 chmod 这个文件夹吗?

edit:我做了更多测试,似乎文件正确写入了 tmp 文件夹。只是在使用“heroku run bash”命令时看不到/被删除。

【问题讨论】:

    标签: python heroku


    【解决方案1】:

    Heroku 的行为不像虚拟服务器。按照设计,测功机是一次性的。

    每次您使用heroku run 时,您都会访问一个one-off dyno,该one-off dyno 在命令结束后立即被丢弃(或者您在像bash 这样的交互的情况下注销)。您正在两个完全不相关且不共享文件系统的实例中运行 createfile.py 脚本和 bash

    我不清楚您要达到的目标,但一般来说,您可以在短时间内将临时“工作”的东西保留在单个进程的内存中。您希望在该范围之外坚持的任何内容都必须保存在您的测功机之外,例如在 PostgreSQL 等客户端-服务器数据库或 Azure Blob Storage 等对象存储中。

    请注意,此模型是经过深思熟虑的架构决策,它会影响 Heroku dynos 的所有层级。升级到付费计划不会改变任何事情。

    【讨论】:

      猜你喜欢
      • 2021-09-18
      • 2014-03-13
      • 2020-07-15
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多