ubuntu下部署django应用
**不需要**在 `/home/user/django_project/stockmanage` 目录下执行该命令,**而应该在 `/home/user/django_project` 目录下执行**。
---
### 📁 原因说明:
你的项目结构是:
```
/home/user/django_project/
├── .venv/
└── stockmanage/ ← 这是 django-admin startproject 创建的项目目录
├── manage.py
└── stockmanage/ ← 这是 Django 的 Python 包(包含 settings.py、wsgi.py 等)
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
```
当你运行:
```bash
gunicorn stockmanage.wsgi:application
```
Gunicorn 会尝试 **导入 Python 模块 `stockmanage.wsgi`**。
这要求 **`stockmanage` 是一个可导入的顶层 Python 包**,也就是说,**当前工作目录必须包含 `stockmanage/` 这个文件夹**。
- ✅ 正确位置:`/home/user/django_project`
→ 因为这里有一个名为 `stockmanage` 的子目录,Python 能把它当作模块导入。
- ❌ 错误位置:`/home/user/django_project/stockmanage`
→ 此时当前目录下没有叫 `stockmanage` 的子目录(只有 `manage.py` 和另一个 `stockmanage/` 子包),
所以 Python 无法找到顶层模块 `stockmanage`,会报错:
```
ModuleNotFoundError: No module named 'stockmanage'
```
---
### ✅ 正确操作步骤:
```bash
# 进入项目根目录(包含 manage.py 的那一层)
cd /home/user/django_project
# 激活虚拟环境(如果使用)
source .venv/bin/activate
# 启动 Gunicorn
gunicorn --bind 0.0.0.0:8000 stockmanage.wsgi:application
```
---
### 💡 小技巧:验证是否能导入
你可以在 `/home/user/django_project` 目录下运行:
```bash
python -c "import stockmanage.wsgi; print('OK')"
```
如果输出 `OK`,说明路径正确;如果报错,说明当前目录不对。
---
### 总结:
> **必须在 `/home/user/django_project`(即 `manage.py` 所在目录)运行 Gunicorn 命令,而不是在其子目录 `stockmanage/` 中。**
这样 Python 解释器才能正确找到并导入 `stockmanage.wsgi` 模块。
在使用 Django 开发服务器 (python manage.py runserver) 时,默认情况下它会自动处理静态文件(如 CSS、JavaScript 和图片)。但是当你切换到生产环境下的 WSGI 服务器(例如 Gunicorn)时,你需要注意静态文件的处理方式。
Django 的开发服务器会自动为你服务静态文件,但在生产环境中,你需要手动配置以确保这些文件能够被正确地提供给客户端。以下是解决静态文件不显示问题的一些步骤:
1. 收集静态文件:
确保你已经运行了 python manage.py collectstatic 命令。这个命令会将所有静态文件复制到你在 settings.py 中指定的 STATIC_ROOT 目录中。
2. 检查设置:
在你的 settings.py 文件中,确保以下设置正确无误:
STATIC_URL = '/static/'
设置 STATIC_ROOT 来指定一个目录,用于存放通过 collectstatic 命令收集的所有静态文件。
如果你有额外的静态文件目录,可以添加到 STATICFILES_DIRS 列表中。
3. 静态文件服务配置:
在生产环境中,你需要配置一个Web服务器(如 Nginx 或 Apache)来服务静态文件,或者使用像 Whitenoise 这样的工具直接从 Python 应用中提供静态文件。
使用Whitenoise的例子:
安装whitenoise: pip install whitenoise
在你的 wsgi.py 文件中添加 WhiteNoise 到你的 WSGI 应用程序:
python
from whitenoise import WhiteNoise
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
application = WhiteNoise(application, root="/path/to/static/files")
更新 settings.py 文件以包含 Whitenoise 在中间件列表中,并且确保它位于其他中间件之前:
python
MIDDLEWARE = [
'whitenoise.middleware.WhiteNoiseMiddleware',
# ... 其他中间件 ...
]
4. 检查路径和权限:
确保静态文件存储的目录及其内容对web服务器可读。
完成上述步骤后,重启Gunicorn服务,尝试访问你的应用并查看静态文件是否正常加载。如果仍然有问题,请检查浏览器的开发者工具(通常按F12打开),查看网络请求部分,看看是否有任何关于静态资源加载失败的具体错误信息。这可以帮助进一步诊断问题所在。
(qianwen)