无法为 Django 应用程序提供静态文件 (Apache - WSGI )

couldn't serve static file for a django app (apache - wsgi )

提问人:MEZIANE Yacine 提问时间:9/27/2023 更新时间:9/27/2023 访问量:27

问:

我有一个名为 Portfolio 的投影,这是我的主页。 我在这个项目上创建了一个名为 experiences 的应用程序。

在开发服务器上,我能够为两者提供静态文件。但是在生产中,我只能为主页(项目)提供服务,而不能为应用程序提供服务。我有 404 Not Found 错误。

我让 collecstatic 变得欣喜若狂。

我在每个应用程序(和项目)上都有一个静态目录。

我正在使用带有 wsgi 模块的 apache。

我有这个关于设置文件的会议:

STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "Portfolio/static")
]

拱门下方:

src/
|-- Experiences
|   |-- __pycache__
|   |-- migrations
|   |   `-- __pycache__
|   |-- static
|   |   `-- Experiences
|   |       |-- assets
|   |       |   |-- fonts
|   |       |   `-- img
|   |       `-- css
|   `-- templates
|       `-- Experiences
|-- Portfolio
|   |-- __pycache__
|   |-- static
|   |   `-- Portfolio
|   |       |-- assets
|   |       |   |-- fonts
|   |       |   `-- img
|   |       `-- css
|   `-- templates
|       `-- Portfolio
`-- staticfiles
    |-- Experiences
    |   |-- assets
    |   |   |-- fonts
    |   |   `-- img
    |   `-- css
    |-- Portfolio
    |   |-- assets
    |   |   |-- fonts
    |   |   `-- img
    |   `-- css
    `-- admin
python django apache mod-wsgi django-staticfiles

评论


答:

1赞 Mounir 9/27/2023 #1

这是意料之中的,在开发中,Django 提供静态文件,但在生产中(当 debug 为 false 时)则不然,因为这会导致性能问题。

你可以查看官方文档,了解如何在 Django Docs 中配置静态文件

如果你想要一个更简单的解决方案,你可以尝试白噪声

0赞 MEZIANE Yacine 9/27/2023 #2

我更改了应用程序静态文件的位置。 我已将所有静态文件放在同一个目录上。

yacine@debian:/var/www/Portfolio/src/Portfolio$ tree static/ -d
static/
|-- Experiences
|   |-- assets
|   |   |-- fonts
|   |   `-- img
|   `-- css
`-- Portfolio
    |-- assets
    |   |-- fonts
    |   `-- img
    `-- css

我不确定这是最好的方法,但它目前有效。

评论

0赞 Mounir 9/28/2023
为此,您可以使用 Django 文档中提到的专用命令,该命令会将所有 Django 应用程序中的所有静态文件收集到您在设置中定义的 STATIC_ROOT 文件夹中。因此,在每次部署之前,您必须确保运行它,与数据库迁移的 migrate 命令相同./manage.py collectstatic