Python 脚本无法在 Heroku 上创建文件夹
Python script can't create folder on Heroku
在本地调试服务器上有一个脚本 运行 没问题。
if not os.path:
os.mkdir(os.path.normpath(f'media/{request.user.id}/'))
file_path = os.path.normpath(f'media/{request.user.id}/' + file_name + '.csv')
在 Heroku 上我得到一个错误。如果我不创建目录“媒体”并且不将其部署到 Heroku,我会收到错误 'media/1/' 不存在。
怎么了,为什么脚本不能创建目录?
眼前的问题是您的 if
条件是针对 os.path
模块本身的:
if not os.path:
os.path
is part of the standard library 所以只要导入了 os
或 os.path
,if os.path
就应该总是 True
。如果它曾经 did return False
(例如,如果你有一个损坏或精简的 Python 环境)你将无法使用它在 if
块中。
我怀疑你想要更像这样的东西,使用 os.path.exists()
:
user_media_folder = os.path.normpath(f'media/{request.user.id}/')
if not os.path.exists(user_media_folder):
# ^^^^^^^^^^^^^^^^^^^^^^^^^^
os.mkdir(user_media_folder)
file_path = os.path.normpath(user_media_folder + file_name + '.csv')
无论如何,假设您不希望这些文件消失,您将无法使用本地文件系统。 It is ephemeral:只要您的 dyno 重新启动,您对其所做的任何更改都将丢失。这种情况经常发生(每天至少一次)并且不可预测。
您必须将上传内容存储在其他地方,例如on Amazon S3 or Azure Blob Storage. See Django + Heroku + S3,例如
在本地调试服务器上有一个脚本 运行 没问题。
if not os.path:
os.mkdir(os.path.normpath(f'media/{request.user.id}/'))
file_path = os.path.normpath(f'media/{request.user.id}/' + file_name + '.csv')
在 Heroku 上我得到一个错误。如果我不创建目录“媒体”并且不将其部署到 Heroku,我会收到错误 'media/1/' 不存在。 怎么了,为什么脚本不能创建目录?
眼前的问题是您的 if
条件是针对 os.path
模块本身的:
if not os.path:
os.path
is part of the standard library 所以只要导入了 os
或 os.path
,if os.path
就应该总是 True
。如果它曾经 did return False
(例如,如果你有一个损坏或精简的 Python 环境)你将无法使用它在 if
块中。
我怀疑你想要更像这样的东西,使用 os.path.exists()
:
user_media_folder = os.path.normpath(f'media/{request.user.id}/')
if not os.path.exists(user_media_folder):
# ^^^^^^^^^^^^^^^^^^^^^^^^^^
os.mkdir(user_media_folder)
file_path = os.path.normpath(user_media_folder + file_name + '.csv')
无论如何,假设您不希望这些文件消失,您将无法使用本地文件系统。 It is ephemeral:只要您的 dyno 重新启动,您对其所做的任何更改都将丢失。这种情况经常发生(每天至少一次)并且不可预测。
您必须将上传内容存储在其他地方,例如on Amazon S3 or Azure Blob Storage. See Django + Heroku + S3,例如