django wth gis.mysql导致内部服务器错误

时间:2015-02-10 16:52:12

标签: python mysql django apache mod-wsgi

我使用centos6机器来部署我的django项目。当我使用django的默认数据库设置和sqlite3,如下所示,它没有问题。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

但是当我尝试将mysql用于空间数据时,请进行如下设置,

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.mysql',
        'NAME': 'dbname',
        'USER': 'username',
        'PASSWORD': 'userpassword',
        'HOST': 'localhost',
    }
}

使用以下apache2错误日志导致500内部服务器错误

mod_wsgi (pid=14782): Target WSGI script '/home/swelite/www/travel/travel/wsgi.py' cannot be loaded as Python module.
mod_wsgi (pid=14782): Exception occurred processing WSGI script '/home/swelite/www/travel/travel/wsgi.py'.
Traceback (most recent call last):
File "/home/swelite/www/travel/travel/wsgi.py", line 18, in <module>
application = get_wsgi_application()
File "/usr/local/lib/python2.7/site-packages/Django-1.7.4-py2.7.egg/django/core/wsgi.py", line 14, in get_wsgi_application
django.setup()
File "/usr/local/lib/python2.7/site-packages/Django-1.7.4-py2.7.egg/django/__init__.py", line 21, in setup
apps.populate(settings.INSTALLED_APPS)
File "/usr/local/lib/python2.7/site-packages/Django-1.7.4-py2.7.egg/django/apps/registry.py", line 78, in populate
raise RuntimeError("populate() isn't reentrant")
RuntimeError: populate() isn't reentrant

所以我原本认为mysql和django的连接可能存在问题,但在我制作模型并使用root @迁移后,我看到mysql数据库被修改了。所以我认为apache可能存在一些问题,试图使用mysql db作为settings.py说但是找不到有什么问题。


EDIT1。 我认为,代码本身不会导致任何错误,因为当我运行时

./manage.py runserver

当我添加错误的数据库信息时,它不会导致错误,它会导致错误。所以我认为它可能是apache和mysql的权限问题。

由于没有sqlite3的问题,我发现我的db.sqlite3文件权限是

-rw-r--r-- 1 root username 36864 2015-02-11 00:22 db.sqlite3

但是我的mysql的django数据库文件的权限设置是

-rw-rw---- 1 mysql mysql     0 2015-02-12 01:13 auth_group.MYD

和apache使用用户'apache'。这意味着当我的apache用户'apache'尝试访问mysql时,会出现'localhost'不存在问题吗?

EDIT2

好的,我必须批准我是傻瓜。这基本上是一个权限问题,但与mysql和apache用户权限设置无关。

关于.python-eggs /

的许可设置

所以我解决这个问题的方法是设置

mkdir path/to/somewhere/error_logs/says/.python-eggs
chmod 777 -R path/to/somewhere/error_logs/says/.python-eggs

但仍有好奇心。为什么当我使用sqlite3而不是mysql时没有出现问题?

1 个答案:

答案 0 :(得分:0)

好的,我必须批准我是傻瓜。这基本上是一个权限问题,但与mysql和apache用户权限设置无关。

关于.python-eggs /

的许可设置

所以我解决这个问题的方法是设置

mkdir path/to/somewhere/error_logs/says/.python-eggs
chmod 777 -R path/to/somewhere/error_logs/says/.python-eggs

但仍有好奇心。为什么当我使用sqlite3而不是mysql时问题没有发生?