Я использую 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')
Я использую 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)
В локальной системе он работает нормально, так как я могу вручную изменять права доступа к файлам.
Но он не работает на Heroku и выдает ошибку:
OSError: [Errno 30] Read-only file system: '/static_cdn'
Я попытался найти static_cdn
, запустив heroku shell
, но не смог даже найти static_cdn
в пути приложения и корневом пути. Но, похоже, это работает, так как другая загрузка через форму работает отлично.
с использованием модели Django upload_to
работает, и даже каталог создается в static_cdn
.
Как я могу создать каталог в static_cdn
на Heroku так же, как Django использует модель upload_to
?