我为发布的丰富代码/配置而道歉 - 但我很难找到错误,并希望有人能够发现它。这是我第一次使用django / virtualenv,所以我确定它可能是愚蠢的。为了记录,我使用的是Python 2.7和Django 1.5。我在共享服务器上,但我有一个具有所有必要依赖项的虚拟环境。
现在,当我的.urls将所有管理页面注释掉时,我能够看到Django欢迎屏幕。但是,我一直在设置一个sqlite3(我知道它不建议生产)数据库来处理我的一个应用程序,称为用户。
我可以使用python shell成功地将User类型的对象添加到数据库中。所以这不是数据库问题。据我所知,当它试图在某个时刻呈现网页时,它正在调用模块用户,但无法找到它。因此,它必须从项目目录外部调用。这让我觉得我需要在我的路径上添加一些东西?但是我要添加什么?
我的virtualenv site-packages目录中有一个符号链接到我项目的内部文件夹 - 即项目/项目(这是应用程序的内部用户)。所以我的猜测是我需要更改该符号链接以指向外部项目目录吗?
我的项目结构如下:
/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
答案 0 :(得分:0)
假设您发布的.bash_profile
来自您的主目录,并且您正在以通常的方式运行Apache,即作为用户root
启动的守护进程并且以用户www-data
或apache
或其他方式分叉子项,然后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()
行中放置了正确的路径。
答案 1 :(得分:0)
我已经解决了这个问题。在阅读fastcgi close教程时 - 它注意到您可能需要在public_html目录中为内部项目目录外部的任何包添加符号链接。因此,由于我的应用程序存在于项目中但内部项目目录的外部 - fastcgi需要指向public_html中模块的链接。