這是我第一次使用 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 檔案夾?我必須先修改這個檔案夾嗎?
編輯:我進行了更多測驗,似乎檔案已正確寫入 tmp 檔案夾。只是在使用“heroku run bash”命令時它無法被看到/被洗掉。
uj5u.com熱心網友回復:
Heroku 的行為不像虛擬服務器。按照設計,dynos 是一次性的。
每次使用時,heroku run您都會訪問一個一次性 dyno,該dyno會在命令結束后立即被丟棄(或者您在諸如 之類的互動式情況下注銷bash)。您正在兩個完全不相關的不共享檔案系統的實體中運行您的createfile.py腳本bash。
我不清楚您要實作的目標,但一般而言,您可以在短時間內將臨時“作業”事物保留在單個行程的記憶體中。您希望在該范圍之外保留的任何內容都必須保存在您的 dyno 之外,例如保存在 PostgreSQL 之類的客戶端-服務器資料庫或 Azure Blob 存盤之類的物件存盤中。
請注意,此模型是一個深思熟慮的架構決策,它會影響 Heroku dynos 的所有層。升級到付費計劃不會改變任何事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/318872.html
上一篇:當本地構建作業正常時,heroku部署不起作用-NodeJS超時
下一篇:如何在heroku上寫入環境變數
