我的电脑运行Ubuntu 12.04,我按照本教程开始使用Django:http://blog.stannard.net.au/2010/12/11/installing-django-with-apache-and-mod_wsgi-on-ubuntu-10-04/
我尝试通过运行此命令/srv/www/
alex
我的sudo django-admin.py startproject alex
项目开始
然后创建了apache文件夹和django.wsgi
文件(/srv/www/alex/apache/django.wsgi
)
/srv/www/alex/
.
├── apache
│ └── django.wsgi
├── alex
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
2 directories, 6 files
alex apache网站:
<VirtualHost *:80>
ServerName alex.djangoserver
DocumentRoot /srv/www/alex
<Directory /srv/www/alex>
Order allow,deny
Allow from all
</Directory>
WSGIDaemonProcess alex.djangoserver processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup alex.djangoserver
WSGIScriptAlias / /srv/www/alex/apache/django.wsgi
</VirtualHost>
apache错误日志结果:
[error] [client 127.0.0.1] mod_wsgi (pid=28076): Exception occurred processing WSGI script '/srv/www/floqq/alex/django.wsgi'.
[error] [client 127.0.0.1] Traceback (most recent call last):
[error] [client 127.0.0.1] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 219, in __call__
[error] [client 127.0.0.1] self.load_middleware()
[error] [client 127.0.0.1] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 39, in load_middleware
[error] [client 127.0.0.1] for middleware_path in settings.MIDDLEWARE_CLASSES:
[error] [client 127.0.0.1] File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py", line 184, in inner
[error] [client 127.0.0.1] self._setup()
[error] [client 127.0.0.1] File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 42, in _setup
[error] [client 127.0.0.1] self._wrapped = Settings(settings_module)
[error] [client 127.0.0.1] File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 95, in __init__
[error] [client 127.0.0.1] raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
[error] [client 127.0.0.1] ImportError: Could not import settings 'alex.settings' (Is it on sys.path?): No module named alex.settings
阿帕奇/ django.wsgi
import os
import sys
path = '/srv/www'
if path not in sys.path:
sys.path.insert(0, '/srv/www')
os.environ['DJANGO_SETTINGS_MODULE'] = 'alex.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
答案 0 :(得分:3)
在你的wsgi文件中,你有:
sys.path.insert(0, '/srv/www')
os.environ['DJANGO_SETTINGS_MODULE'] = 'alex.settings'
将搜索settings.py
中的/srv/www/alex/
。
失败的原因是,根据您发布的树,settings.py
位于/srv/www/alex/alex/
。
所以你有3个选择:
/srv/www/alex/
放入包含alex.settings
。答案 1 :(得分:2)
您不应该将sudo
与开发期间需要的任何命令一起使用;因为你没有以root用户身份进行开发,而且会带来权限,从而带来其他问题。
如果您是django的新手,那么与传统开发框架(如PHP)不同的第一件事就是您不需要Web服务器或数据库服务器就可以开始使用。 Django提供了开发过程中所需的一切,包括一个以runserver
命令开头的Web服务器。
您还应该使用official tutorial来帮助您入门。一旦您对本教程感到满意,您就可以更好地了解如何部署项目,并可以轻松地关注其他帖子。
Apache和mod_wsgi
最适合部署项目,而不是在开发过程中最佳(或必要)。
我建议您从以下步骤开始:
首先,您应该执行sudo apt-get install python-virtualenv
,这将允许您为python / django工作创建单独的环境。这是 only 命令,您应该以root身份运行,并且只会执行一次。
现在,开始吧。打开终端并输入以下内容作为普通用户:
$ virtualenv --no-site-packages django_project
这将创建一个可用于第一个项目的新环境。执行该命令后,输入:
$ source django_project/bin/activate
这会激活新的虚拟环境。您会注意到您的提示现已列出(django_project)
。这可以让您知道自己处于虚拟环境中。最后,你应该安装django:
(django_project) $ pip install django
现在安装了django,您可以从tutorial开始。如果您关闭终端(或打开新的选项卡或终端窗口),则可以通过执行source django_project/bin/activate
重新激活虚拟环境。您可以通过在虚拟环境中键入deactivate
来恢复正常的shell。
希望有所帮助。
答案 2 :(得分:1)
你可以发布你的wsgi.py吗?也许问题就在那里
我的wsgi.py,也许可以帮到你。
import os
import sys
sys.path.append('/Applications/MAMP/htdocs/Django-1.4')
sys.path.append('/Applications/MAMP/htdocs/')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "meishi.settings")
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
答案 3 :(得分:1)
我遵循相同的教程并遇到了同样的问题,但发现了一个SO和一些wsgi docs让我走得更远。关键是在wsgi文件搜索路径列表中添加了2个路径,但实际上只有一个路径指向正确的settings.py
,具体取决于你的文件结构后,根据其他建议改变了一切,...
base = os.path.dirname(os.path.dirname(__file__))
base_parent = os.path.dirname(base)
sys.path.append(base)
sys.path.append(base_parent)
我的网页现在很好用...减去css和其他静态/媒体文件。但是,通过更多的挖掘,这应该很容易解决。