OSError:[Errno 30] Heroku 上 Django 中的只读文件系统

Anu*_*TBE 3 python django heroku

我使用 Django 2.0 和 Heroku 来托管该应用程序。

我的媒体目录设置就像

App/settings/production.py

BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static_cdn', 'media_root')
Run Code Online (Sandbox Code Playgroud)

我正在使用 gTTS 将文本转换为语音并将.mp3文件保存在媒体目录中:

tts_file_name = str(int(time.time())) + '.mp3'
joined_path = os.path.join(settings.MEDIA_ROOT, 'tts')
joined_path_with_file = os.path.join(joined_path, tts_file_name)

# create directory if does not exists
if not os.path.exists(joined_path):
    os.makedirs(joined_path)

tts = gTTS(text='Good morning', lang='en')
tts.save(joined_path_with_file)

# tts path to send to template
tts_media_url = os.path.join(settings.MEDIA_URL, 'tts', tts_file_name)
Run Code Online (Sandbox Code Playgroud)

它在本地系统上运行良好,因为我也可以手动更改文件权限。

但它在 Heroku 上不起作用并给出错误:

OSError: [Errno 30] Read-only file system: '/static_cdn'
Run Code Online (Sandbox Code Playgroud)

我尝试static_cdn通过运行来定位heroku shell,但甚至无法static_cdn在应用程序路径和根路径中找到。但它似乎工作正常,因为其他通过表单上传的工作正常。

使用 Django 模型upload_to是有效的,甚至目录是在static_cdn.

如何static_cdn像 Django 使用模型一样在 Heroku 上创建目录upload_to

ami*_*r92 6

就我而言,发生此错误是因为我设置了STATIC_ROOT = '/static/'

这意味着它正在查看/系统的根文件夹,然后static,这显然是只读的,

更改它以STATIC_ROOT = 'static/'解决我的问题。


Anu*_*TBE 5

MEDIA_ROOT通过删除附加内容更改了路径os.path.dirname(),它现在正在工作。

MEDIA_ROOT = os.path.join(BASE_DIR, 'static_cdn', 'media_root')
Run Code Online (Sandbox Code Playgroud)