【问题标题】:Why won't newly installed Django app with NGINX serve static assets?为什么新安装的带有 NGINX 的 Django 应用程序不提供静态资产?
【发布时间】:2014-07-22 05:04:05
【问题描述】:

我有一台运行 OS X 10.9.3 的 Mac。我正在尝试设置由 gunicorn 提供的 PostgreSQL 数据库支持的 Django 应用程序,并使用 NGINX 提供的静态资产。我是 Django 的老手,MySQL 与开发服务器 (manage.py runserver) 一起运行。但我不熟悉使用 virtualenv、gunicorn 和 NGINX 进行设置。所以我按照here 的说明进行操作。

我的 Django 项目正在http://localhost:3026 成功服务。作为数据库连接测试,我想看看 Django Admin 界面。我访问了http://localhost:3026/admin/。我在下面附上了屏幕截图。

为什么这个管理页面看起来这么难看?它缺少它应该有的必要的图形界面和 css?看起来 NGINX 没有正确地提供这些静态资产。如何排查和解决此问题?

我什至做了python manage.py collectstatic。这样就成功地将所有静态文件复制到了它们应该(我认为?)在/opt/myenv/static 中的位置。您可以看到该命令here 的输出。然后我重新启动了 gunicorn 和 nginx。我以为那会解决它。但不幸的是它没有。问题依然存在。在我的 Django settings.py 文件中,我配置了 STATIC 变量如下:

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'djangobower.finders.BowerFinder',
)
STATIC_ROOT = "/opt/myenv/static/"
STATIC_URL = '/static/'

【问题讨论】:

    标签: python django nginx


    【解决方案1】:

    只有在使用调试服务器时,Django 才会提供静态文件。当站点由单独的 Web 服务器处理时,您需要配置 Web 服务器以提供静态文件本身。

    【讨论】:

    【解决方案2】:

    实际上,建议在本地主机上使用 Django 自己的开发服务器(python manage.py runserver)(根据我多年使用 Django 和 virtualenv 的经验)。因为它节省了您在本地配置 nginx 的宝贵时间。

    但是,如果您确实想使用 Nginx 在本地为您提供静态文件,您可能需要将 django 的 contrib **/admin 静态文件目录复制到您的 virtualenv 指向的位置**。您的 nginx 的 virtualenv 文件(如 *.nginx 文件)将如下所示:

     server_name  localhost;
    
     location /static {
         alias /path/to/where/your/admin/static/directory/is;
         autoindex on;
         access_log off; #optional
      }
    

    然后重新启动 nginx 你可能会得到它的工作。 PS:有关在 Mac 上本地安装和配置 Nginx 的更多信息,您可能需要查看this

    【讨论】:

      猜你喜欢
      • 2014-09-12
      • 2018-07-17
      • 2012-02-20
      • 2016-12-23
      • 2013-08-28
      • 2014-01-13
      • 1970-01-01
      • 2017-08-14
      • 2020-03-06
      相关资源
      最近更新 更多