3

我的电脑运行 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/我的项目alexsudo 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

亚历克斯阿帕奇网站:

<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

更新

apache/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()
4

4 回答 4

3

在您的 wsgi 文件中,您有:

sys.path.insert(0, '/srv/www')

os.environ['DJANGO_SETTINGS_MODULE'] = 'alex.settings'

这将搜索settings.pyin /srv/www/alex/

那失败了,因为根据您发布的树,settings.py它位于/srv/www/alex/alex/.

所以你有3个选择:

  1. 更改插入的路径
  2. 更改目录结构,或
  3. 重构/srv/www/alex/为包含alex.settings.
于 2012-05-08T10:06:11.250 回答
2

您不应该sudo在开发过程中使用任何您需要的命令;因为您不以 root 身份进行开发,这将导致其他具有权限的问题。

如果您是 django 新手,那么与更传统的开发框架(如 PHP)不同的第一件事就是您不需要 Web 服务器或数据库服务器即可开始使用。Django 附带了您在开发过程中所需的一切,包括您从runserver命令开始的 Web 服务器。

您还应该使用官方教程来帮助您入门。一旦您对本教程感到满意,那么您将对如何部署项目有更好的理解,并且可以轻松地关注其他帖子。

Apachemod_wsgi在部署项目时是最好的,在开发过程中不是最优的(或必要的)。

我建议您从以下步骤开始:

  • 首先,您应该执行sudo apt-get install python-virtualenv,这将允许您为您的 python/django 工作创建一个单独的环境。这是您应该以 root 身份运行的唯一命令,并且只会执行一次。

  • 现在,开始吧。打开终端并以普通用户身份输入以下内容:

    $ virtualenv --no-site-packages django_project

    这将创建一个新环境,您可以将其用于您的第一个项目。执行该命令后,键入以下内容:

    $ source django_project/bin/activate

    这将激活新的虚拟环境。您会注意到您的提示现在已(django_project)列出。这让您知道您在虚拟环境中。最后,你应该安装 django:

    (django_project) $ pip install django

现在 django 已安装,您可以从教程开始。如果您关闭终端(或打开新选项卡或终端窗口),您可以通过执行source django_project/bin/activate. deactivate您可以通过在虚拟环境中键入来回到您的正常 shell 。

希望有帮助。

于 2012-05-08T11:09:32.800 回答
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()
于 2012-05-08T09:59:00.050 回答
1

我遵循了相同的教程并遇到了同样的问题,但发现了一个SO和一些wsgi 文档让我走得更远。关键是在 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 和其他静态/媒体文件。但这应该很容易通过更多的挖掘来解决。

于 2012-07-07T05:03:40.030 回答