我正在运行CentOS 7服务器,并通过执行以下操作设法建立了Django站点并开始运行:
yum install httpd gcc mod_wsgi
pip install django django-extensions psycopg2
在虚拟环境中跑mysite
在虚拟环境中启动了一个新的Django项目前面的步骤成功安装了一个新的Django 1.8项目,并且能够It worked!
在浏览器中查看该页面。
当我修改settings.py
文件以将PostgreSQL 9.4用作项目数据库时,问题就开始了。我将默认DATABASES
字典更改为以下内容:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'myproject',
'USER': 'myprojectuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
当我在浏览器中按刷新时,然后Internal Server Error
从Apache获得一个,并且error_log说:
[] mod_wsgi (pid=1049): Target WSGI script '/var/www/django/projects/mysite/mysite/wsgi.py' cannot be loaded as Python module.
[] mod_wsgi (pid=1049): Exception occurred processing WSGI script '/var/www/django/projects/mysite/mysite/wsgi.py'.
[] Traceback (most recent call last):
[] File "/var/www/django/projects/mysite/mysite/wsgi.py", line 16, in <module>
[] application = get_wsgi_application()
[] File "/var/www/django/virtual_environments/mysite/lib/python3.4/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
[] django.setup()
[] File "/var/www/django/virtual_environments/mysite/lib/python3.4/site-packages/django/__init__.py", line 18, in setup
[] apps.populate(settings.INSTALLED_APPS)
[] File "/var/www/django/virtual_environments/mysite/lib/python3.4/site-packages/django/apps/registry.py", line 78, in populate
[] raise RuntimeError("populate() isn't reentrant")
[] RuntimeError: populate() isn't reentrant
[] mod_wsgi (pid=1049): Target WSGI script '/var/www/django/projects/mysite/mysite/wsgi.py' cannot be loaded as Python module.
[] mod_wsgi (pid=1049): Exception occurred processing WSGI script '/var/www/django/projects/mysite/mysite/wsgi.py'.
[] Traceback (most recent call last):
[] File "/var/www/django/projects/mysite/mysite/wsgi.py", line 16, in <module>
[] application = get_wsgi_application()
[] File "/var/www/django/virtual_environments/mysite/lib/python3.4/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
[] django.setup()
[] File "/var/www/django/virtual_environments/mysite/lib/python3.4/site-packages/django/__init__.py", line 18, in setup
[] apps.populate(settings.INSTALLED_APPS)
[] File "/var/www/django/virtual_environments/mysite/lib/python3.4/site-packages/django/apps/registry.py", line 78, in populate
[] raise RuntimeError("populate() isn't reentrant")
[] RuntimeError: populate() isn't reentrant
我已经尽力解决了所有问题。我认为问题是特定于Python 3.4的使用,也许没有正确版本的mod_wsgi可以使用。
我试过通过pip安装mod_wsgi,但不确定如何使Apache使用该版本,而不是系统范围的版本。可能甚至不是导致问题的原因。
我在这个网站上几乎尝试了所有问答,但是没有运气,因此我们将不胜感激,
谢谢。
编辑
这是我VirtualHost
对Apache2的配置:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
DocumentRoot /var/www/django/projects/mysite/mysite
WSGIScriptAlias / /var/www/django/projects/mysite/mysite/wsgi.py
WSGIDaemonProcess example.com python-path=/var/www/django/projects/mysite:/var/www/django/virtual_environments/mysite/lib/python3.4/site-packages
WSGIProcessGroup example.com
<Directory /var/www/django/projects/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
问题是安装的mod_wsgi版本yum install mod_wsgi
与Python 3.4不兼容。
解决方法是先安装mod_wsgi
,pip3.4 install mod_wsgi
然后运行命令mod_wsgi-express install-module
。确保之前的两个命令都在虚拟环境之外运行。
然后,您将必须编辑文件/etc/httpd/conf.d/wsgi.conf
以反映您的设置。
我的wsgi.conf文件看起来类似于:
LoadModule wsgi_module /etc/httpd/modules/mod_wsgi-py34.cpython-34m.so
WSGIPythonHome /var/www/venv
WSGIDaemonProcess apache user=apache group=apache
WSGIProcessGroup apache
WSGISocketPrefix /var/run/wsgi
Alias /apps /var/www/apps/
<Directory /var/www/apps/>
Options ExecCGI MultiViews Indexes
MultiViewsMatch Handlers
AddHandler wsgi-script .py
AddHandler wsgi-script .wsgi
DirectoryIndex index.html index.php index.py app.wsgi
Order allow,deny
Allow from all
</Directory>
参考:https : //gist.github.com/jmorton/558f7079ed2159156277(感谢Paulo Scardine)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句