【问题标题】:Django + Nginx 500 error when fetching static content获取静态内容时 Django + Nginx 500 错误
【发布时间】:2023-03-13 07:52:01
【问题描述】:

我在使用 Django、Nginx 和 Gunicorn 提供静态内容时遇到问题。我可以从我的 /media/ 文件夹以及 html 中提供媒体文件(图像),但是对 /static/ 文件夹的静态请求会产生 500 个错误。

我运行 collectstatic 来收集 /opt/myapp/myapp/myapp/static/ 中的所有静态数据

这是我的 Nginx 配置:

server {
    listen 80;
    server_name <ip_address>;

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /static/ {
            alias /opt/myapp/myapp/myapp/static/;
    }

    location = /media/ {
            alias /opt/myapp/myapp/myapp/media/;
    }


    location / {
            include proxy_params;
            proxy_pass http://unix:/opt/myapp/myapp/myapp/myapp.sock;
    }
}

还有 Django urls.py:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('core.urls')),
    url(r'^accounts/', include('allauth.urls')),
]  + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 
   + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Django 设置.py:

STATICFILES_DIRS = [
    '/opt/myapp/myapp/myapp/core/static',
]

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'static')

还有一个来自 Nginx access.log 的示例(error.log 中没有错误):

"GET /static/markup/css/index.css HTTP/1.1" 500 63893 "http://104.131.44.215/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"

【问题讨论】:

  • nginx或gunicorn是否在错误日志中报告任何错误?

标签: python django nginx gunicorn


【解决方案1】:

你的 settings.py 是什么样的?

编辑:

  1. 再次查看您的代码。在 Nginx 中,您的路径与 settings.py 不同!
  2. 您可能误解了 Django 文档(staticfiles_dirs 与 static_root)
  3. 您的 STATICFILES_DIRS 应如下所示

STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), )

  1. 如果这不起作用,请更改您的 STATIC_ROOT(必须是与 staticfiles_dirs 不同的路径)并且不要忘记运行 collectstatic

【讨论】:

  • 我在上面的settings.py中添加了静态行
  • 据我了解,我的 staticfiles_dir 应该包含应用程序静态文件的路径,这些文件位于:'/opt/myapp/myapp/myapp/core/static'。然后,当我运行 collectstatic 时,它们都被放置在静态根目录下: os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(file)) )), '静止的')。然后,我的 Nginx 应该包含指向 os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(file))), 'static') 的链接,对吗?
  • 没关系,我显然没有理解 staticfiles 目录的意义
  • 解决了!谢谢!
  • 是的,“staticfiles_dirs”包含静态数据(css、js、img)仅用于开发(在您的网络或本地主机中,不使用 Nginx),但它通常放置在应用程序目录和项目旁边目录(例如 myapp/static,NO myapp/core/static)。你定义的 STATIC_ROOT 变量很奇怪,我从来没有见过这样的东西。通常是 STATIC_ROOT = "path/to/static/in/production", NO os.path.join(os.path blablablabla) ...不要忘记将我上面的帖子标记为有用:-)。
猜你喜欢
  • 2020-04-03
  • 2014-07-30
  • 2017-07-07
  • 1970-01-01
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
相关资源
最近更新 更多