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

Posted

技术标签:

【中文标题】django wth gis.mysql 导致内部服务器错误【英文标题】:django wth gis.mysql causes internal server error 【发布时间】:2015-04-10 19:35:00 【问题描述】:

我使用 centos6 机器来部署我的 django 项目。当我使用 django 的默认 db 设置和 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',
    

它会导致 500 内部服务器错误,并带有以下 apache2 错误日志

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 所说但找不到问题所在。


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

./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' 没有?

编辑2

好吧,我不得不承认我是愚蠢的。这基本上是一个权限问题,但与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 时没有出现问题?

【问题讨论】:

你看***.com/questions/27093746/…了吗? @Foon 是的 iv 检查但没有用。 :( 【参考方案1】:

好吧,我不得不承认我是愚蠢的。基本上是权限问题,与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 时没有出现问题?

【讨论】:

以上是关于django wth gis.mysql 导致内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Nginx 后面调试 Django/Gunicorn

Django ajax 错误响应最佳实践

Django异常中间件:TypeError:object()不带参数

django动态拉链内部服务器错误

django-admin.py 不是内部或外部命令

复现CVE-2017-7233(Django url跳转漏洞)