无法在数字海洋上载媒体文件django

时间:2018-08-23 08:51:20

标签: django nginx gunicorn digital-ocean django-deployment

我最近在数字海洋上部署了django应用。在尝试创建包含图像的对象之前,一切工作都很好。我收到一条错误消息说服务器错误(500)。

这是我尝试做的事情:

server {
listen 80;
server_name ****;

location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
    root /home/joseph/hacka;
}

location /media/ {
    root /home/joseph/hacka;
}

location / {
    include proxy_params;
    proxy_pass http://unix:/run/gunicorn.sock;
}
}

这是我的settings.py代码:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

不幸的是,这还没有解决。
如果您知道我的问题的答案,请帮助我。

更新
我发现了我的代码存在的问题:将debug设置为True时,出现错误消息
errno 13: Permission denied.

但是,我不知道该如何解决。

如果可以,请帮助我。

3 个答案:

答案 0 :(得分:1)

只需要像这样在setting.py中从MEDIA_URL中删除“ /” MEDIA_URL ='媒体/'

答案 1 :(得分:0)

我想您的问题是由于媒体文件引起的。 您是否检查过media设置?

您需要检入settings.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

MEDIA_URL = '/media/'

答案 2 :(得分:0)

我可能也遇到过类似的问题。我的设置是在Nginx后面运行的Gun​​icorn。将文件上传到django媒体库时,该请求不会显示在Gunicorn的访问日志中。这意味着它被Nginx停止,并返回了500错误代码。进一步的搜索导致找到该网站https://killtheradio.net/technology/nginx-returns-error-on-file-upload/,它解决了我的问题。

基本上,Nginx临时将文件正文保存到/var/lib/nginx/client_body的磁盘上。但是Nginx进程无法访问此文件夹。然后一个简单的chown解决了这个问题。