【发布时间】:2014-03-14 21:03:25
【问题描述】:
我正在开发一个 django API,它将在运行 Ubuntu 的服务器上通过 WSGI 在 Apache2 之上运行。
用户将能够使用 POST 请求将他们拍摄的照片上传到服务器。 API 处理此请求,然后尝试将图像写入/var/www/media/animals/user_uploads/<animal_type>/<picture_name>.jpg。如果没有目录/var/www/media/animals/user_uploads/<animal_type>/,它将创建它。
在开发期间进行测试时,一切都很好,无论是使用 Windows 还是 Scientific Linux。在部署服务器上测试时,我收到此错误:
据我了解,Apache2 服务器正在使用用户 www-data 运行。就我而言,运行cat /etc/passwd 来获取用户列表,这就是我为www-data 得到的:
www-data:x:33:33:www-data:/var/www:/bin/sh
我假设这意味着www-data 可以访问/var/www/ 中的所有内容。我试过了:
chmod 777 -R 媒体
这行得通,但显然是解决这个问题的一个非常糟糕的方法。有没有更好的方法来解决这个问题?
这是我的 wsgi.py:
import os, sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "serengeti.settings")
sys.path.append('/serengeti/django/serengeti')
sys.path.append('/serengeti/django')
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
我的settings.py 文件中有这个:
MEDIA_ROOT = '/var/www/media/'
MEDIA_URL = os.path.join(BASE_DIR,'/media/')
我的vhost.conf 包含以下内容:
Alias /media/ /var/www/media/
【问题讨论】:
标签: python linux django apache ubuntu