Python Django部署故障

Python Django部署故障,python,django,apache,mod-wsgi,Python,Django,Apache,Mod Wsgi,好吧,我已经在这附近走了好几天了。。。我想是时候寻求一些帮助了,我想我的安装还可以。。。 服务器操作系统:Centos 5 Python-v2.6.5 Django-v(1,1,1,'最终',0) 我的apache配置: <VirtualHost *:80> DocumentRoot /opt/workshop ServerName taller.antell.com.py WSGIScriptAlias / /opt/workshop/workshop.ws

好吧,我已经在这附近走了好几天了。。。我想是时候寻求一些帮助了,我想我的安装还可以。。。 服务器操作系统:Centos 5 Python-v2.6.5 Django-v(1,1,1,'最终',0)

我的apache配置:

<VirtualHost *:80>
    DocumentRoot /opt/workshop
    ServerName taller.antell.com.py
    WSGIScriptAlias / /opt/workshop/workshop.wsgi
    WSGIDaemonProcess taller.antell.com.py user=ignacio group=ignacio processes=2 threads=25
    ErrorLog /opt/workshop/apache.error.log
    CustomLog /opt/workshop/apache.custom.log combined

    <Directory "/opt/workshop">
            Options +ExecCGI +FollowSymLinks -Indexes -MultiViews
            AllowOverride All
            Order allow,deny
            Allow from all
    </Directory>
</VirtualHost>
我在apache错误日志中看到的错误是:

[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122] mod_wsgi (pid=11459): Exception occurred processing WSGI script '/opt/workshop/workshop.wsgi'.
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122] Traceback (most recent call last):
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/core/handlers/wsgi.py", line 241, in __call__
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     response = self.get_response(request)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/core/handlers/base.py", line 134, in get_response
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     return self.handle_uncaught_exception(request, resolver, exc_info)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/core/handlers/base.py", line 154, in handle_uncaught_exception
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     return debug.technical_500_response(request, *exc_info)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/views/debug.py", line 40, in technical_500_response
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     html = reporter.get_traceback_html()
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/views/debug.py", line 114, in get_traceback_html
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     return t.render(c)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/template/__init__.py", line 178, in render
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     return self.nodelist.render(context)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/template/__init__.py", line 779, in render
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     bits.append(self.render_node(node, context))
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/template/debug.py", line 81, in render_node
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     raise wrapped
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122] TemplateSyntaxError: Caught an exception while rendering: No module named vehicles
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122] 
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122] Original Traceback (most recent call last):
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/template/debug.py", line 71, in render_node
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     result = node.render(context)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/template/debug.py", line 87, in render
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     output = force_unicode(self.filter_expression.resolve(context))
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/template/__init__.py", line 572, in resolve
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     new_obj = func(obj, *arg_vals)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/template/defaultfilters.py", line 687, in date
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     return format(value, arg)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/utils/dateformat.py", line 269, in format
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     return df.format(format_string)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/utils/dateformat.py", line 30, in format
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     pieces.append(force_unicode(getattr(self, piece)()))
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/utils/dateformat.py", line 175, in r
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     return self.format('D, j M Y H:i:s O')
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/utils/dateformat.py", line 30, in format
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     pieces.append(force_unicode(getattr(self, piece)()))
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/utils/encoding.py", line 71, in force_unicode
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     s = unicode(s)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/utils/functional.py", line 201, in __unicode_cast
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     return self.__func(*self.__args, **self.__kw)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/utils/translation/__init__.py", line 62, in ugettext
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     return real_ugettext(message)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/utils/translation/trans_real.py", line 286, in ugettext
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     return do_translate(message, 'ugettext')
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/utils/translation/trans_real.py", line 276, in do_translate
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     _default = translation(settings.LANGUAGE_CODE)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/utils/translation/trans_real.py", line 194, in translation
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     default_translation = _fetch(settings.LANGUAGE_CODE)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/utils/translation/trans_real.py", line 180, in _fetch
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     app = import_module(appname)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     __import__(name)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122] ImportError: No module named vehicles
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122] 
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122] mod_wsgi (pid=11463): Exception occurred processing WSGI script '/opt/workshop/workshop.wsgi'.
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122] Traceback (most recent call last):
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/core/handlers/wsgi.py", line 241, in __call__
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     response = self.get_response(request)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/core/handlers/base.py", line 73, in get_response
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     response = middleware_method(request)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/middleware/common.py", line 56, in process_request
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     if (not _is_valid_path(request.path_info) and
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/middleware/common.py", line 142, in _is_valid_path
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     urlresolvers.resolve(path)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/core/urlresolvers.py", line 303, in resolve
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     return get_resolver(urlconf).resolve(path)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/core/urlresolvers.py", line 218, in resolve
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     sub_match = pattern.resolve(new_path)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/core/urlresolvers.py", line 216, in resolve
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     for pattern in self.url_patterns:
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/core/urlresolvers.py", line 245, in _get_url_patterns
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/core/urlresolvers.py", line 240, in _get_urlconf_module
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     self._urlconf_module = import_module(self.urlconf_name)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]   File "/opt/python2.6/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122]     __import__(name)
[Wed Apr 21 15:17:48 2010] [error] [client 190.128.226.122] ImportError: No module named vehicles.urls
请帮我一把,我卡住了。。。显然是我的车辆模块(应用程序中唯一的模块)有问题,另一件事是当我尝试时:

[root@localhost workshop]# python manage.py runserver 0:8000
这个应用程序运行得很好,我认为问题出在wsgi配置附近,有些东西没有点击

Tks

更新: 车间主任看起来像

[root@localhost workshop]# ls -l
total 504
-rw-r--r-- 1 root root  22706 Apr 21 15:17 apache.custom.log
-rw-r--r-- 1 root root 408141 Apr 21 15:17 apache.error.log
-rw-r--r-- 1 root root      0 Apr 17 10:56 __init__.py
-rw-r--r-- 1 root root    124 Apr 21 11:09 __init__.pyc
-rw-r--r-- 1 root root    542 Apr 17 10:56 manage.py
-rw-r--r-- 1 root root   3326 Apr 17 10:56 settings.py
-rw-r--r-- 1 root root   2522 Apr 21 11:09 settings.pyc
drw-r--r-- 4 root root   4096 Apr 17 10:56 templates
-rw-r--r-- 1 root root    381 Apr 21 13:42 urls.py
-rw-r--r-- 1 root root    398 Apr 21 13:00 urls.pyc
drw-r--r-- 2 root root   4096 Apr 21 13:44 vehicles
-rw-r--r-- 1 root root  38912 Apr 17 10:56 workshop.db
-rw-r--r-- 1 root root    263 Apr 21 15:30 workshop.wsgi
车辆主任

[root@localhost vehicles]# ls -l
total 52
-rw-r--r-- 1 root root  390 Apr 17 10:56 admin.py
-rw-r--r-- 1 root root  967 Apr 21 13:00 admin.pyc
-rw-r--r-- 1 root root  732 Apr 17 10:56 forms.py
-rw-r--r-- 1 root root 2086 Apr 21 13:00 forms.pyc
-rw-r--r-- 1 root root    0 Apr 17 10:56 __init__.py
-rw-r--r-- 1 root root  133 Apr 21 11:36 __init__.pyc
-rw-r--r-- 1 root root  936 Apr 17 10:56 models.py
-rw-r--r-- 1 root root 1827 Apr 21 11:36 models.pyc
-rw-r--r-- 1 root root  514 Apr 17 10:56 tests.py
-rw-r--r-- 1 root root  989 Apr 21 13:44 tests.pyc
-rw-r--r-- 1 root root 1035 Apr 17 10:56 urls.py
-rw-r--r-- 1 root root 1935 Apr 21 13:00 urls.pyc
-rw-r--r-- 1 root root 3164 Apr 17 10:56 views.py
-rw-r--r-- 1 root root 4081 Apr 21 13:00 views.pyc
更新2:这是my settings.py

# Django settings for workshop project.

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
    ('Ignacio Rojas', 'ignacio@antell.com.py'),
    ('Fabian Biedermann', 'fabian@antell.com.py'),
)

MANAGERS = ADMINS

DATABASE_ENGINE = 'sqlite3' 
DATABASE_NAME = '/opt/workshop/workshop.db'
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# If running in a Windows environment this must be set to the same as your
# system time zone.
TIME_ZONE = 'America/Asuncion'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'es-py'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# Absolute path to the directory that holds media.
# Example: "/home/media/media.lawrence.com/"
MEDIA_ROOT = ''

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash if there is a path component (optional in other cases).
# Examples: "http://media.lawrence.com", "http://example.com/media/"
MEDIA_URL = ''

# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
# trailing slash.
# Examples: "http://foo.com/media/", "/media/".
ADMIN_MEDIA_PREFIX = '/media/'

# Make this unique, and don't share it with anybody.
SECRET_KEY = '11y0_jb=+b4^nq@2-fo#g$-ihk5*v&d5-8hg_y0i@*9$w8jalp'

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
)

ROOT_URLCONF = 'workshop.urls'

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    "/opt/workshop/templates"
)

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'workshop.vehicles',
)

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
)
这是测试的输出:

新wsgi:

import sys

sys.path.insert(0, '/opt/django/workshop')
sys.path.insert(0, '/opt/django')

import settings

import django.core.management
django.core.management.setup_environ( settings)
utility = django.core.management.ManagementUtility( )
command = utility.fetch_command( 'runserver')

command.validate( )

import django.conf
import django.utils

django.utils.translation.activate( django.conf.settings.LANGUAGE_CODE)

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler( )
解决方法:

chmod -R 755 workshop && chown -R apache:apache workshop

我猜您的路径实际上是
/opt/workshop/workshop/

因此,在wsgi文件中,应该有
sys.path.append('/opt/workshop/workshop')
如果不是这样的话,则应将
workshop.settings
改为
settings

[编辑] 依我看,你有三个选择

  • opt
    添加到sys.path so
    workshop.url
    和这样的工作(不好主意,因为
    opt
    可能包含任何内容`
  • 从所有路径中删除
    workshop
  • 将Python代码移动到
    车间
    (或其他)目录(确保它包含
    \uuuu init\uuuu.py

  • 就我个人而言,我会选择选项3,因为否则您将把python应用程序与其他应用程序(媒体、模板等)混合使用。

    我猜您的路径实际上是
    /opt/workshop/workshop/

    因此,在wsgi文件中,应该有
    sys.path.append('/opt/workshop/workshop')
    如果不是这样的话,则应将
    workshop.settings
    改为
    settings

    [编辑] 依我看,你有三个选择

  • opt
    添加到sys.path so
    workshop.url
    和这样的工作(不好主意,因为
    opt
    可能包含任何内容`
  • 从所有路径中删除
    workshop
  • 将Python代码移动到
    车间
    (或其他)目录(确保它包含
    \uuuu init\uuuu.py

  • 就我个人而言,我会选择选项3,因为否则您会将python应用程序与其他应用程序(媒体、模板等)混合使用。

    尝试将包含settings.py文件的目录及其父目录添加到sys.path。更好的做法是,阅读“”并使用末尾描述的WSGI脚本文件内容(在你阅读了这篇文章后,你会明白为什么这是一个问题。):-)


    更新1

    在另一条评论中,您将权限发布为“drw-r--r--2根车辆”

    没有为任何人在目录上设置“x”位。这将导致任何需要生成目录列表才能查看目录中内容的操作失败

    换句话说,查看所有目录权限,并将其设置为“drwxr-xr-x”

    此外,由于您已将目录归root所有,因此如果您的应用程序需要写入任何目录,它将无法写入


    总之,目录/文件权限存在问题。

    尝试将包含settings.py文件的目录及其父目录添加到sys.path。更好的做法是,阅读“”并使用结尾描述的WSGI脚本文件内容(在您阅读文章说明问题的原因之后)。:-)


    更新1

    在另一条评论中,您将权限发布为“drw-r--r--2根车辆”

    没有为任何人在目录上设置“x”位。这将导致任何需要生成目录列表才能查看目录中内容的操作失败

    换句话说,查看所有目录权限,并将其设置为“drwxr-xr-x”

    此外,由于您已将目录归root所有,因此如果您的应用程序需要写入任何目录,它将无法写入


    总之,目录/文件权限问题。

    你能显示你的目录结构吗?特别是,你的主
    workshop
    目录中是否有第二个
    workshop
    目录,其中包含实际的应用程序?-rw-r--r--1根根apache.custom.log-rw-r--r--1根apache error.log-rw-r--r--1根root init.py-rw-r--r--1 root init.pyc-rw-r--r--1 root root manage.py-rw-r--r--1 root root settings.py-rw-r--r--1 root root settings.pyc drw-r--r--4个root模板-rw-r--1个root url.py rw-r--r--1个root url.pyc drw-r--r--2个root车辆-1个root车间.db-rw--r--1个root车间rkshop.wsgiTry使用
    ls-1
    将其展平,并编辑您的问题以便我们可以查看。由于注释的原因,格式完全错误。您能否显示您的目录结构?特别是,您是否有可能在主
    workshop
    目录中有第二个
    workshop
    目录,其中包含实际的应用程序?-rw-r--r--1 root root-init.py-rw-r--r--1 root-root-apache.custom.log-rw-r--r--1 root-root-init.py-rw-r--r--1 root-root-manage.py-rw-r--r--1 root-root-settings.py rw-r--r--1 root-settings.pyc-drw-r--r--4个root-root模板-r--1个root-url.py r--rw-r--r--r--1个root-url.pyc drw-r--r--2个root车辆-rw-r--r--1个root车间.db--rw-r--r--1个root车间.wsgiTry使用
    ls-1
    将其展平,并编辑您的问题以便我们可以看到它。由于注释的原因,格式完全错误。它不能是/opt/workshop/workshop/或者apache不会将日志输出到他指定的目录中打开了一个
    ls
    。我认为是后者。如果他的/opt/workshop在系统路径上,那么/opt/workshop/workshop目录结构实际上会工作-至少设置模块在workshop.settings上。Tha
    import sys
    
    sys.path.insert(0, '/opt/django/workshop')
    sys.path.insert(0, '/opt/django')
    
    import settings
    
    import django.core.management
    django.core.management.setup_environ( settings)
    utility = django.core.management.ManagementUtility( )
    command = utility.fetch_command( 'runserver')
    
    command.validate( )
    
    import django.conf
    import django.utils
    
    django.utils.translation.activate( django.conf.settings.LANGUAGE_CODE)
    
    import django.core.handlers.wsgi
    
    application = django.core.handlers.wsgi.WSGIHandler( )
    
    chmod -R 755 workshop && chown -R apache:apache workshop