1

我是使用 Django 进行 Web 开发的新手,所以请多多包涵,并提前感谢您的帮助。

我在学习的时候一直在使用 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 有问题,但我不确定到底是什么。这就是我到达这里的方式:

  1. Mac OS X Mountain Lion (10.8.2) 全新安装。
  2. 从 Mac App Store 安装 Xcode,然后从 Xcode 的首选项安装命令行工具。
  3. 没有更新 Apache 或 Python,我使用的是默认安装的任何内容(Apache 2.2.22 和 Python 2.7.2)。
  4. 从源代码安装 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
    
  5. 编辑 httpd.conf,添加以下内容并重新启动 Apache:

    LoadModule wsgi_module libexec/apache2/mod_wsgi.so
    
  6. 通过下载 Postgres.app ( http://postgresapp.com ) 并将其复制到我的 Applications 文件夹来安装 PostgreSQL 9.2.2。
  7. 运行应用程序,将以下内容添加到我的 ~/.bash_profile(终端默认使用 Postgres.app 的 psql,而不是 Mac OS X 上预装的),然后创建一个新数据库以与我的 django 一起使用项目:

    PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"
    
  8. 从源代码安装 psycopg 2.4.6。我下载了文件,将其解压缩,然后从解压缩的目录中:

    $ python setup.py install
    
  9. 从源代码安装 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': '',
        }
    }
    
  10. 编辑 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)),
    )
    
  11. 在 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>
    
  12. 重新启动阿帕奇。试图在我的浏览器上加载 localhost/admin/ 并得到上述错误。

请帮忙 :)

谢谢, 达苏维亚

4

1 回答 1

3

因为您的设置文件没有指定连接到 Postgres 的用户,所以您尝试使用运行代码的用户帐户进行连接(并且因为它是由 Apache 下的 mod_wsgi 运行的,所以该用户是_www)。

如果您使用 Postgres.app 为您运行 Postgres,您需要将数据库USERNAME值设置为系统上您帐户的用户名 - 所以如果您的用户名是foo,请设置USERNAMEfoo

DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'NAME': 'my_db_name',
    'USER': 'foo',
    'PASSWORD': '',
    'HOST': '',
    'PORT': '',
    }
}

您还可以更新您的 apache 配置以以不同的用户身份运行您的代码 -如果您想这样做,请查看 mod_wsgi 文档中的WSGIDaemonProcess 。

于 2013-02-13T23:31:41.200 回答