如何在带有Python 3.4和Apache2的CentOS 7上将PostgreSQL与Django应用程序一起使用

用户名

我正在运行CentOS 7服务器,并通过执行以下操作设法建立了Django站点并开始运行:

  • yum install httpd gcc mod_wsgi
  • 已安装PostgreSQL 9.4
  • 下载并编译了Python 3.4
  • 使用pyvenv3.4创建虚拟环境
  • pip install django django-extensions psycopg2在虚拟环境中
  • mysite在虚拟环境中启动了一个新的Django项目
  • 最后配置了Apache2和PostgreSQL 9.4

前面的步骤成功安装了一个新的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_wsgipip3.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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在电子应用程序中将sqlite3与变量一起使用

如何在python3 cgi和apache2中修复UnicodeDecodeError

如何将Slack的OAuth2与Java桌面应用程序一起使用

在Ubuntu 14.04(Python 3.4)上使用Apache2和libapache2-mod-wsgi-py3的AssertionError

如何在Django Rest Framework上将普通Filter和SearchFilter一起使用?

如何在Angular 6应用程序中将Image Upload插件与CKEditor 4一起使用?

如何在单元测试 React 应用程序中一起使用 Karma 和 Jest?

SWIG和Mingw-64与Python一起使用…不是有效的Win32应用程序

如何配置两个不同的Web应用程序以在同一主机/端口上与Apache一起使用?

Phonegap和AngularJS如何在应用程序中一起工作?

如何在带有if __name __ ='__ main__'块的Python3中使用相对导入?

如何在Python 3中使用tkinter创建带有值的弹出消息按钮?

如何将Node.js Web服务器与Apache Cordova应用程序一起使用

如何将docker.asp.net核心应用程序和Redis一起使用?

如何将 .env 与 ES6 模块与 node js 和 express 应用程序一起使用?

如何在带有 Postgresql 的 Python API 中使用参数和请求头?

Apache2 带有 mod_wsgi python3 'TypeError:' 并返回错误 500

如何在同一个 React 应用程序中将 redux 和 graphql 与 apollo 客户端一起使用?

如何将 django-oscar 与其他应用程序一起使用?

如何使djangoCMS网址与我的django应用程序网址一起使用?

将自定义 Python 类与 Django 应用程序一起使用

如何使用.htaccess / Apache2在带有简单php应用程序的子目录中配置wordpress应用程序?

如何在C#中将依赖注入与工作单元和存储库一起使用?(不是基于网络的应用程序)

如何配置Gradle应用程序以将SLF4J与Log4J 2实现一起使用?

蓝牙信标如何与应用程序一起使用?

这是可能有3个应用程序运行在相同的端口互通在一起吗?

如何在Yii框架中使用带有Yiistrap扩展名的bootstrap3主题(引导版本2)

如何在apache2中使用Python?

是否有可能使用python 2和python 3模块的应用程序?