0

对于发布的大量代码/配置,我深表歉意——但我正在努力寻找错误,并希望有人能够发现它。这是我第一次使用 django/virtualenv,所以我确信这可能是一些愚蠢的事情。作为记录,我使用的是 Python 2.7 和 Django 1.5。我在共享服务器上,但我有一个包含所有必要依赖项的虚拟环境。

现在,当我的 .urls 将所有管理页面都注释掉时,我可以看到 Django 欢迎屏幕。但是,我一直在设置一个 sqlite3(我知道不建议将其用于生产)数据库来处理我的一个名为 users 的应用程序。

我可以使用 python shell 成功地将 User 类型的对象添加到数据库中。所以这不是数据库问题。据我所知,当它尝试在某些时候呈现网页时,它正在调用模块用户,但找不到它。因此,它必须从项目目录外部调用。这让我觉得我可能需要在我的路径中添加一些东西?但是我要添加什么?

我的 virtualenv site-packages 目录中有一个符号链接到我的项目的内部文件夹 - 即 project/project (这是应用程序用户的内部)。所以我的猜测是我需要将该符号链接更改为指向外部项目目录?

错误的根源


我的项目结构如下:

/project

/project/project_db

/project/manage.py

/project/users/__init__.py

/project/users/admin.py

/project/users/models.py

/project/users/tests.py

/project/users/views.py

/project/project/__init__.py

/project/project/settings.py

/project/project/urls.py

/project/project/wsgi.py

现在,相关文件:

/project/project/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'project_db',                      # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': '',
        'PASSWORD': '',
        'HOST': '',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '',                      # Set to empty string for default.
    }
}

#...

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'users',
)

下一步:/project/users/models.py

from django.db import models

# Create your models here.
class User(models.Model):

    CRAWFORD = 'CR'
    CARPENTER = 'CA'
    NOTAPPLICABLE = 'NA'

    HALL_CHOICES = (
        (CRAWFORD, 'Crawford'),
        (CARPENTER, 'Carpenter'),
        (NOTAPPLICABLE, 'Not Applicable'),
    )

    hall = models.CharField(max_length=2,choices=HALL_CHOICES,default=NOTAPPLICABLE)
    email = models.CharField(max_length=256)
    password = models.CharField(max_length=32)
    supervisor = models.ForeignKey('self',blank=True, null=True, default=None)

    def __unicode__(self):
            return self.email + " " + self.hall

最后:.bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

export PATH=$PATH:$HOME/bin:$HOME/virtual/lib/python2.7/site-packages/django/bin:$HOME/website/project
export PYTHONPATH=$PYTHONPATH:$HOME/virtual/lib/python2.7/site-packages:$HOME/website/project
4

2 回答 2

0

我已经解决了这个问题。在仔细阅读 fastcgi 的教程后 - 它注意到您可能需要为内部项目目录外部的任何包添加一个符号链接到 public_html 目录。因此,由于我的应用程序存在于项目中,但位于项目内部目录的外部 - fastcgi 需要指向 public_html 中模块的链接。

于 2013-06-29T05:33:16.713 回答
0

假设.bash_profile您发布的内容来自您的主目录,并且您以通常的方式运行 apache,即作为由用户启动的守护进程root并将子进程作为用户www-dataapache其他人分叉,那么PYTHONPATH将不适用于 apache 进程,所以您必须单独配置它。

如果您正在使用mod_wsgi,那么您可以将以下 apache 指令添加到您的网络服务器配置中...

WSGIPythonPath $HOME/virtual/lib/python2.7/site-packages:$HOME/website/project

...确保您替换$HOME主目录的完整绝对路径名,因为它对于 apache 用户来说是不一样的。


更新

根据指南,您应该已经创建了一个文件~/public_html/dispatch.fcgi,其中包含类似...

#!/usr/local/bin/python2.6

import sys
import os

# Make sure to change 'username' to your username!
sys.path.append('/home/username/local/lib/python2.6/site-packages')

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

from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")

...因此请检查您是否sys.path.append()在行中放置了正确的路径。

于 2013-06-28T20:34:54.177 回答