【问题标题】:Can't upload media files django on digital ocean无法在数字海洋上上传媒体文件 django
【发布时间】:2019-01-29 14:20:08
【问题描述】:

我最近在数字海洋上部署了一个 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/')

很遗憾,这并没有成功。
如果您知道我的问题的答案,请帮助我。

更新
我发现我的代码存在问题:当我将调试设置为 True 时,我收到一条错误消息
errno 13: Permission denied.

但是,我不知道如何解决这个问题。

如果可以的话,请帮助我。

【问题讨论】:

  • Nginx的错误日志显示什么?
  • 它说我没有它找不到一些与我的问题无关的引导文件

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    只需像这样从 setting.py 中的 MEDIA_URL 中删除 '/' MEDIA_URL = '媒体/'

    【讨论】:

      【解决方案3】:

      我猜你的问题是因为媒体文件。 您是否检查了media 设置?

      你需要检查settings.py

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

      【讨论】:

      • 这不是问题。这正是我所拥有的
      • 您是否尝试使用 djngo 提供静态文件?
      • 什么意思?在我的网址中?
      • 假设服务器中有 abc.jpg。现在要访问该 jpg 文件,您将使用 example.com/abc.jpg。您的 django 服务器是否仅用于此目的?
      • 我可以成功访问我的静态和媒体文件,但我无法从网站上传任何媒体文件。
      猜你喜欢
      • 2021-07-25
      • 2018-02-22
      • 2016-03-02
      • 2020-11-29
      • 2021-01-08
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多