亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

圖像從部署到 heroku 的 django web 應用程序中消失

圖像從部署到 heroku 的 django web 應用程序中消失

小怪獸愛吃肉 2022-12-27 17:16:45
我正在開發一個 django 項目,使用 django rest 框架編寫 rest API 以在 android 應用程序中使用它們,我的主要想法是在 django 中開發后端,在 android 中開發前端,項目部署在 heroku 上。我的應用程序包含一些帶有商品圖片的庫存,問題是當我上傳圖片時它成功上傳了圖片但一段時間后或更具體地說是幾個小時后圖片自行消失。這是我的 setting.py 文件"""Django settings for forBirds project.Generated by 'django-admin startproject' using Django 3.0.6.For more information on this file, seehttps://docs.djangoproject.com/en/3.0/topics/settings/For the full list of settings and their values, seehttps://docs.djangoproject.com/en/3.0/ref/settings/"""import osimport dj_database_url# Buld paths inside the project like this: os.path.join(BASE_DIR, ...)BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# Quick-start development settings - unsuitable for production# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!SECRET_KEY = ''# SECURITY WARNING: don't run with debug turned on in production!DEBUG = TrueALLOWED_HOSTS = ['*']# Application definitionINSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'account',    'rest_framework',    'rest_framework.authtoken',    'Birds',]MIDDLEWARE = [    'django.middleware.security.SecurityMiddleware',    'django.contrib.sessions.middleware.SessionMiddleware',    'django.middleware.common.CommonMiddleware',    'django.middleware.csrf.CsrfViewMiddleware',    'django.contrib.auth.middleware.AuthenticationMiddleware',    'django.contrib.messages.middleware.MessageMiddleware',    'django.middleware.clickjacking.XFrameOptionsMiddleware',    'whitenoise.middleware.WhiteNoiseMiddleware',]ROOT_URLCONF = 'forBirds.urls'
查看完整描述

2 回答

?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

Heroku 文件系統是短暫的——這意味著在 dyno 運行時對文件系統的任何更改只會持續到 dyno 關閉或重新啟動。每個 dyno 都使用最近部署的文件系統的干凈副本啟動。

最佳做法不是將上傳的文件存儲到磁盤,而是 利用云文件存儲服務,例如 Amazon 的 S3。


查看完整回答
反對 回復 2022-12-27
?
慕森王

TA貢獻1777條經驗 獲得超3個贊

當您將文件上傳到 Django 管理員時,它會查看DEFAULT_FILE_STORAGE設置配置以確定如何存儲該文件。默認情況下,它使用django.core.files.storage.FileSystemStorage,這意味著它正在將那些上傳的文件寫入 dyno 文件系統中定義的位置MEDIA_ROOT。

問題是,dynos 是短暫的,它們可以在沒有任何警告的情況下被銷毀、重新啟動和移動,從而取代你的文件系統。這意味著那些上傳的文件只是被刪除得無影無蹤,但ImageField引用仍然認為它們在那里。

此問題的解決方案是更新項目DEFAULT_FILE_STORAGE以使用永久性的東西,例如s3-compatible object store。在 Heroku 和 Django 領域,一個常見的解決方案是django-storagesHeroku 的 Bucketeer 附加組件一起使用。該解決方案將您的文件上傳到持久性數據存儲,該數據存儲在 dyno 重新啟動后仍然存在,而不是寫入經常被刪除的 dyno 文件系統。

我知道這可能會讓人望而生畏,所以我寫了這篇文章,其中很好地介紹了 Heroku + Bucketeer 流程。


查看完整回答
反對 回復 2022-12-27
  • 2 回答
  • 0 關注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號