我是Django的网络开发新手,所以请耐心等待,并提前感谢您的帮助。
在学习的过程中,我一直在使用Django自己的Web服务器和SQLite。但是,现在我正在努力为我的下一个项目设置一个更复杂的设置。
我的设置(Apache,Python,mod_wsgi,PostgreSQL服务器,psycopg和Django)应该尽我所能地工作。我创建了我的Django项目,并在我的浏览器上访问了localhost,在那里我得到了“欢迎来到Django!它工作了!”页。但是,当我尝试启用管理员并访问localhost / admin /时出现以下错误(请注意,我可以使用Django自己的Web服务器访问此页面而不会出错):
OperationalError at /admin/
FATAL: Role "_www" does not exist
Request Method: GET
Request URL: http://localhost/admin/
Django Version: 1.4.3
Exception Type: OperationalError
Exception Value: FATAL: role "_www" does not exist
Exception Location: /Library/Python/2.7/site-packages/psycopg2/__init__.py in connect, line 178
我猜测PostgreSQL或psycopg有些不对劲,但我不确定究竟是什么。这就是我到达这里的方式:
从源
安装mod_wsgi 3.4$ curl -O http://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz
$ tar xvfz mod_wsgi-3.4.tar.gz
$ cd mod_wsgi-3.4
$ ./configure
$ make
(注意:我必须输入以下行才能使“make”起作用:)
$ sudo ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/ /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain
$ make install
编辑了httpd.conf,添加了以下内容并重新启动了Apache:
LoadModule wsgi_module libexec/apache2/mod_wsgi.so
运行应用程序,将以下内容添加到我的〜/ .bash_profile中(默认情况下,终端使用Postgres.app的psql,而不是预装在Mac OS X上的那个),然后创建一个新的我的django项目使用的数据库:
PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"
从源代码安装psycopg 2.4.6。我下载了文件,将其解压缩,然后从解压缩目录中删除:
$ python setup.py install
从源代码安装Django 1.4.3。创建了一个新项目和一个新应用程序。编辑settings.py以取消注释管理应用程序并输入我的数据库设置(如Postgres.app网站上所述:http://postgresapp.com/documentation#toc_3)。数据库设置如下所示:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'my_db_name',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
编辑urls.py以取消注释与管理员相关的行:
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
)
在https.conf末尾添加了以下文字:
WSGIScriptAlias / /Users/antubel/Projects/Django/antubel_com/antubel_com/wsgi.py
WSGIPythonPath /Users/antubel/Projects/Django/antubel_com
<Directory /Users/antubel/Projects/Django/antubel_com>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
重启Apache。试图在我的浏览器上加载localhost / admin /并得到上面提到的错误。
请帮助:)
谢谢, Dasuevia
答案 0 :(得分:3)
由于您的设置文件未指定用户连接到Postgres,您尝试使用运行代码的用户帐户进行连接(并且因为它在Apache下由mod_wsgi运行,因此该用户为{{1 }})。
如果您使用Postgres.app为您运行Postgres,则需要将数据库_www
值设置为系统帐户的用户名 - 因此,如果您的用户名为USERNAME
,将foo
设置为USERNAME
,如下所示:
foo
您还可以更新您的apache配置,以便以不同的用户身份运行您的代码 - 如果您想要改变它,请查看mod_wsgi文档中的WSGIDaemonProcess。