我FileField在models.py
class DocFile(models.Model):
document = models.FileField(upload_to='_mat/')
它適用于本地(mac),并且檔案存盤在 /Users/whitebear/myproj/_mat/
但是我在服務器上做同樣的事情(Ubuntu 20,使用 ENGINX-unit)
它顯示錯誤 PermissionError: [Errno 13] Permission denied: '/_mat'
但是,/var/www/html/myproj/_mat/權限是 777
所以我想,它以某種方式試圖將其/_mat設為絕對路徑 ..???
如果我這樣設定upload_to,
document = models.FileField(upload_to='/var/www/html/myproj_mat/')
它說使用“??相對路徑”
這些是錯誤堆疊跟蹤。
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/rest_framework/views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/rest_framework/views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
raise exc
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/rest_framework/views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "/var/www/html/aicomposer/current/defapp/views.py", line 350, in post
entry.save()
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/db/models/base.py", line 726, in save
self.save_base(using=using, force_insert=force_insert,
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/db/models/base.py", line 763, in save_base
updated = self._save_table(
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/db/models/base.py", line 868, in _save_table
results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/db/models/base.py", line 906, in _do_insert
return manager._insert(
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/db/models/query.py", line 1270, in _insert
return query.get_compiler(using=using).execute_sql(returning_fields)
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1415, in execute_sql
for sql, params in self.as_sql():
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1358, in as_sql
value_rows = [
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1359, in <listcomp>
[self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1359, in <listcomp>
[self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1310, in pre_save_val
return field.pre_save(obj, add=True)
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/db/models/fields/files.py", line 302, in pre_save
file.save(file.name, file.file, save=False)
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/db/models/fields/files.py", line 89, in save
self.name = self.storage.save(name, content, max_length=self.field.max_length)
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/core/files/storage.py", line 54, in save
return self._save(name, content)
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/site-packages/django/core/files/storage.py", line 255, in _save
os.makedirs(directory, exist_ok=True)
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/os.py", line 213, in makedirs
makedirs(head, exist_ok=exist_ok)
File "/home/ubuntu/anaconda3/envs/aiwave/lib/python3.8/os.py", line 223, in makedirs
mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/_mat'
uj5u.com熱心網友回復:
的MEDIA_ROOT設定[Django的DOC]指定:
將保存用戶上傳檔案的目錄的絕對檔案系統路徑。
因此,您應該使用此設定指定您將存盤媒體檔案的位置。如果MEDIA_ROOT是這樣/,那么它會將這些存盤在/_mat/服務器的目錄中。
因此,您可以將MEDIA_ROOT設定設定為:
# settings.py
# ?,
MEDIA_ROOT = '/var/www/html/myproj/'
# ?
uj5u.com熱心網友回復:
權限被拒絕我認為來自 ubuntu 檔案系統它自己所以你可以運行
須藤 chmod -R 755 /var/www/html/myproj/_mat/
并且最好讓 Nginx 的用戶與 gunicorn 相同,并讓該用戶訪問您的媒體,如下所示讓您的用戶是 user1
須藤 chown -R user1:user1 /var/www/html/myproj/_mat/
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/351077.html
上一篇:無法決議剩余部分:來自''twitter:source_delete','的','
下一篇:MySQL(事務控制語言TCL)
