标签: mod-wsgi

在AWS上使用mod_wsgi的Django站点无法创建FK表单字段,因为尚未加载相关模型

我正在使用Django 1.4官方版本在Django网站上工作.我的网站有一些应用程序.其中一个应用程序有一个名为CampaignFKs的模型,用于其他应用程序中的模型.如在参考的Django(https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey)建议,我选择来定义FK字段使用字符串来代替相关的模型类本身,因为我希望在下一个版本中有循环引用,这种方法避免了循环导入问题.

当我使用部署在AWS(亚马逊网络服务)网站的BitNami djangostack 1.4(阿帕奇,mod_wsgi的,MySQL的),我部署的站点工作正常的大部分.在显示Campaign模型表单的页面上,Django在尝试创建依赖于Campaign模型的外键字段的表单字段时引发了异常,抱怨相关模型未加载.有趣/可怕的是,当我设置settings.DEBUG为True(绝对不是我们在网站上线后我们想要的东西),问题不再发生!

当我在我的本地Django开发服务器上测试它时,该网站工作得很好,并且它也使用部署在我的Windows工作站上的相同BitNami djangostack完美地工作.

这是我在AWS控制台上看到的相关Apache错误输出.

[error] ERROR :: Internal Server Error: /campaigns/
[error] Traceback (most recent call last):
[error]   File "/opt/bitnami/apps/django/lib/python2.6/site-packages/django/core/handlers/base.py", line 101, in get_response
[error]     request.path_info)
    ... (django/wsgi blah blah)
[error]   File "/opt/bitnami/apps/django/django_projects/Project/campaign/views.py", line 5, in <module>
[error]     from forms import CampaignForm
[error]   File "/opt/bitnami/apps/django/django_projects/Project/campaign/forms.py", line 12, in <module>
[error]     class CampaignForm(forms.ModelForm):
[error]   File "/opt/bitnami/apps/django/lib/python2.6/site-packages/django/forms/models.py", line 206, in __new__
[error]     opts.exclude, opts.widgets, formfield_callback)
[error]   File "/opt/bitnami/apps/django/lib/python2.6/site-packages/django/forms/models.py", line 160, …
Run Code Online (Sandbox Code Playgroud)

django mod-wsgi amazon-web-services

4
推荐指数
1
解决办法
1131
查看次数

如何为多个单独的Django实例配置Apache WSGI?

我有一个apache实例,我有以下内容

WSGIPythonPath /production/somelocation/django12/lib/python2.4/site-packages/
<VirtualHost 192.168.1.1:443>
        WSGIScriptAlias / /opt/project.wsgi
        .....
Run Code Online (Sandbox Code Playgroud)

我的Django 1.5 app apache配置看起来像,

WSGIPythonPath /production/somelocation/django15/lib/python2.7/site-packages/
<VirtualHost 192.168.1.2:443>
        ....
        WSGIScriptAlias / /opt/project2.wsgi
Run Code Online (Sandbox Code Playgroud)

我的/opt/project.wsgi看起来像

import os
import sys

# django1.2 virtualenv
import site
site.addsitedir("/production/somelocation/django12/lib/python2.4/site-packages")
.....
Run Code Online (Sandbox Code Playgroud)

但是,当我去网站时,我仍然得到我的默认django(1.5)实例.我错过了什么?

python django mod-wsgi apache2

4
推荐指数
1
解决办法
3002
查看次数

PyObject_Malloc中的Python Segfaults

无论我尝试使用什么版本的Python(2.7,3.2,3.4),我都会在这行代码中得到一个段错误:

Program received signal SIGSEGV, Segmentation fault.
_PyObject_Malloc (ctx=0x0, nbytes=50) at Objects/obmalloc.c:1159
1159                if ((pool->freeblock = *(block **)bp) != NULL) {
Run Code Online (Sandbox Code Playgroud)

我的应用程序是一个mod_wsgi应用程序,我正在使用OpenSSL的C扩展(但我​​看到C扩展中没有错误,即使使用vagrind).我无法使用valgrind重现错误,但valgrind会提供大量错误,这些错误不会被提供的python抑制文件抑制.例如:

==4800== Use of uninitialised value of size 8
==4800==    at 0xD95E42A: PyEval_EvalFrameEx (ceval.c:2430)
==4800==    by 0xD964614: PyEval_EvalCodeEx (ceval.c:3585)
==4800==    by 0xD8C092F: function_call (funcobject.c:632)
==4800==    by 0xD89411E: PyObject_Call (abstract.c:2067)
==4800==    by 0xD95FC23: PyEval_EvalFrameEx (ceval.c:4558)
==4800==    by 0xD964614: PyEval_EvalCodeEx (ceval.c:3585)
==4800==    by 0xD8C080E: function_call (funcobject.c:632)
==4800==    by 0xD89411E: PyObject_Call (abstract.c:2067)
==4800==    by 0xD95FC23: PyEval_EvalFrameEx (ceval.c:4558)
==4800==    by 0xD963BE0: PyEval_EvalFrameEx (ceval.c:4331) …
Run Code Online (Sandbox Code Playgroud)

python mod-wsgi segmentation-fault

4
推荐指数
1
解决办法
1202
查看次数

Flask为什么不给我提供交互式调试器?

这是一个简单的Flask应用,出现语法错误(应该是sys.version,而不是sys.version()

from flask import Flask, url_for, request, render_template
import sys

app = Flask(__name__)
app.config.from_object(__name__)

@app.route('/')
def index():
    version = sys.version()
    return "This is the index page.  Python version info: {}".format(version)

if __name__ == '__main__':
    app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

当我在本地运行它并尝试访问http:// localhost:5000时,我得到了不错的Werkzeug调试器:

在此处输入图片说明

但是当我在远程服务器(Apache 2.4.17,mod_wsgi 4.4.21)上运行它时,我只得到一个通用的500错误页面:

在此处输入图片说明

我已经尝试了各种方法来使这项工作:

  • app.debug = True之后app = Flask(__name__)
  • 基于此链接,我也尝试添加以下代码:

from werkzeug.debug import DebuggedApplication application = DebuggedApplication(app, True)

但似乎无济于事。

我知道调试器无法在派生环境中工作,但是根据此链接,mod_wsgi的默认模式是派生。我的Apache配置为:

WSGIDaemonProcess flasktest user=david group=devgrp threads=1 python-path=/apps/www/80/wsgi-scripts/FlaskTest:/apps/.virtualenvs/flasktest/lib/python3.4/site-packages
Run Code Online (Sandbox Code Playgroud)

那为什么不能得到漂亮的调试器呢?

编辑:这是我添加的修改文件(无效) …

python apache mod-wsgi werkzeug flask

4
推荐指数
1
解决办法
1821
查看次数

在virtualenv中使用django的apache mod_wsgi错误

我似乎无法找到一个好的答案.在将其作为WSGIDaemon运行时,谁需要拥有virtualenv?我假设我的操作系统(Ubuntu 16)www-data,但我想确定.尝试一些新的东西,让这个东西根据这篇文章的答案来运作......

django apache配置与WSGIDaemonProcess无法正常工作

django项目,virtualenv文件夹或两者都需要由apache组拥有吗?在没有指定端口的情况下,需要为django项目提供什么样的所有权?为什么我会得到以下内容?

根本问题:

 Call to 'site.addsitedir()' failed for '(null)'
Run Code Online (Sandbox Code Playgroud)

当我启动Apache时,我收到此错误.我遵循了几个不同的指南,包括:http: //modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.htmlhttps://docs.djangoproject.com/en/1.10/howto/部署/ wsgi/modwsgi / 但没有成功.

我的虚拟环境路径是 /usr/local/virtualenvs/servicesite

我的django项目路径就是/home/addohm/projects/rtservice/servicesite manage.py所在/home/addohm/projects/rtservice/servicesite/servicesite的位置,它留下了我的wsgi.py的位置.

wsgi.py:

SERVICESITE = ['/usr/local/virtualenvs/servicesite/lib/python3.5/site-packages']

import os
import sys
import site

prev_sys_path = list(sys.path)

for directory in SERVICESITE
        site.addsitedir(directory)

new_sys_path = []
for item in list(sys.path):
        if item not in prev_sys_path:
                new_sys_path.append(item)
                sys.path.remove(item)
sys.path[:0] = new_sys_path

"""  **Doesn't seem to work, throwing error in apache logs**
site.addsitedir('/usr/local/virtualenvs/servicesite/lib/python3.5/site-packages')
"""

from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", …
Run Code Online (Sandbox Code Playgroud)

python apache django ubuntu mod-wsgi

4
推荐指数
1
解决办法
2791
查看次数

使用 pyenv 运行 mod_wsgi

我正在尝试在 Apache 服务器上运行 python Web 应用程序。我已经安装了 mod_wsgi: sudo apt-get install libapache2-mod-wsgi

这是我的站点配置文件:

<virtualhost *:80>
    ServerName 192.168.60.144

    WSGIDaemonProcess myapp.dev processes=1 threads=1 python-home="/home/user/.pyenv/versions/3.6.1" python-path="/home/user/API" home='/home/user/API'
    WSGIProcessGroup myapp.dev
    WSGIScriptAlias /  /home/user/API/config_files/myservice.wsgi.py

    <Directory /home/user/API>
        Order allow,deny
        Allow from all
    </Directory>

    DocumentRoot /home/user/API/myservice/testdir
    <Directory />
         AllowOverride None
          Require all granted
     </Directory>

</virtualhost>
Run Code Online (Sandbox Code Playgroud)

但是,当尝试访问网络应用程序时,我收到“内部服务器错误”。这是日志中的错误:

[Mon Mar 12 13:34:04.054636 2018] [wsgi:error] [pid 6762:tid 139768980616960] [remote 10.10.30.13:34438] mod_wsgi (pid=6762): 目标 WSGI 脚本'/home/user/API/config_files /myservice.wsgi.py' 无法作为 Python 模块加载。[Mon Mar 12 13:34:04.054665 2018] [wsgi:error] [pid 6762:tid 139768980616960] [remote 10.10.30.13:34438] mod_wsgi …

python apache mod-wsgi pyenv

4
推荐指数
1
解决办法
1868
查看次数

mod_wsgi:处理 WSGI 脚本时发生异常(django 部署)

我正在尝试使用以下 Apache 配置部署 django 项目:

Apache 虚拟主机配置

<Virtualhost *:80>
    DocumentRoot /var/www/project/backend
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    WSGIDaemonProcess backend python-home=/var/www/project/myenv python-path=/var/www/gestor_documental/backend

    WSGIProcessGroup backend
    WSGIScriptAlias / /var/www/project/backend/backend/wsgi.py process-group=backend
    Alias /static/ /var/www/project/backend/static/

    <Directory /var/www/project/backend>
            Require all granted
    </Directory>
</Virtualhost>
Run Code Online (Sandbox Code Playgroud)

wsgi.加载文件

LoadModule wsgi_module "/var/www/project/myenv/lib/python3.5/site-packages/mod_wsgi/server/mod_wsgi-py35.cpython-35m-x86_64-linux-gnu.so"
WSGIPythonHome "/var/www/project/myenv"
Run Code Online (Sandbox Code Playgroud)

wsgi.py是django默认自带的

wsgi.py

import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings")

application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)

这是项目树:

project
|- backend
|  |- api (django app)
|  |- backend
|     |- ...
|     |- settings.py
|     |- wsgi.py
|-- myenv (virtualenv)
Run Code Online (Sandbox Code Playgroud)

这是我尝试加载网络时不断收到的错误日志: …

apache django mod-wsgi

4
推荐指数
1
解决办法
1万
查看次数

在 Django/mod_wsgi 虚拟环境中配置 WSGIPythonHome 的问题

我在 Windows 10 上运行 Python 3.7.1 和 Apache 2.4.38。我设置了一个虚拟环境,其中包含通过“pip”安装的 Django 2.2.5 和 mod_wsgi 4.6.5。在“httpd.conf”内部,我按照几条指令将 WSGIPythonHome 设置为指向虚拟环境的根目录。但是当我启动 Apache 时,它​​失败并显示:“没有名为‘编码’的模块”。Apache 似乎需要访问系统范围的 Python。

我在“C:\Program Files\Python3.7.1”中找到了系统范围的Python。虚拟环境位于:“D:\PROJ\PYTHON\VEnv\django”。

这是我添加到“httpd.conf”中的内容:

LoadModule wsgi_module "D:/PROJ/PYTHON/VEnv/django/Lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"

WSGIScriptAlias / "D:/PROJ/PYTHON/VEnv/django/Shipkaliev/wsgi.py"

WSGIPythonHome "D:/PROJ/PYTHON/VEnv/django"

WSGIPythonPath "D:/PROJ/PYTHON/VEnv/django/Shipkaliev"

<Directory "D:/PROJ/PYTHON/VEnv/django/Shipkaliev">
<Files wsgi.py>
    Require all granted
</Files>
</Directory>
Run Code Online (Sandbox Code Playgroud)

根据: https: //modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html和: https: //docs.djangoproject.com/en/2.2/howto/deployment/wsgi/modwsgi/这就是需要设置的方式。

因此,使用此配置,Apache 无法找到虚拟环境中不存在的所有本机 Python 模块,如“编码”、“编解码器”、“io”等。

当我注释掉“WSGIPythonHome”指令时,Apache 初始化了 Python,但是如果我尝试在“wsgi.py”脚本中导入 Django,它无法找到它。

当我将“WSGIPythonHome”更改为指向系统范围的Python并将虚拟环境的“站点包”添加到路径时,我让一切正常运行的方法是:

WSGIPythonHome "C:/Program Files/Python3.7.1"

WSGIPythonPath "D:/PROJ/PYTHON/VEnv/django/Lib/site-packages;D:/PROJ/PYTHON/VEnv/django/Shipkaliev"
Run Code Online (Sandbox Code Playgroud)

但这并不是它的预期工作方式。“WSGIPythonHome”有什么意义?难道我做错了什么?我的解决方案可以接受吗?

非常感谢!

mod-wsgi apache2.4 python-3.7

4
推荐指数
1
解决办法
3195
查看次数

使用mod_wsgi导入python模块

我们正试图让wsgi应用程序在mod_wsgi上运行.我们在使用之前运行它wsgiref.simple_server,作为调试环境.现在,我们希望将其转移到使用Apache httpd与在同一端口下加载静态文件集成,并提供更适合生产的环境.

我们设置的httpd.conf文件如下所示:

<VirtualHost *:80>

    DocumentRoot /var/www/

    ErrorLog /var/www/log/error_log

    LogLevel debug

    WSGIScriptAlias /app /var/www/python/resource/rest.py

    <Directory /var/www/python/>
            Order allow,deny
            Allow from all
    </Directory>

    <Directory />
            Order allow,deny
            Allow from all

            RewriteEngine On
            # Some rewrites go here

    </Directory>

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

通过这种设置,我们可以访问主应用程序文件rest.py(下http://myhost/app),但是对模块的任何导入(比如from module1 import functionmodule1与rest.py位于同一目录下)都会失败ImportError.

我怀疑这与必须设置某种环境变量有关,但我已添加/var/www/pythonsys.path主应用程序方法,但它不起作用.任何帮助或指向这一点将非常感激.

谢谢!

python apache mod-wsgi

3
推荐指数
1
解决办法
2059
查看次数

Flask + mod_wsgi:服务器配置拒绝客户端

在尝试使用Apache + mod_wsgi运行Flask时,我已经尝试了很多事情以达到很高的挫败感.

基本上我已经完成了以下教程:

http://flask.pocoo.org/docs/deploying/mod_wsgi/#installing-mod-wsgi http://www.lonesomedev.com/?p=169

但在浏览器上我收到以下错误:


访问被禁止!

您无权访问请求的对象.它受读保护或服务器无法读取.

如果您认为这是服务器错误,请与网站管理员联系.

错误403

在Apache error.log中有以下内容:

[Fri May 03 17:17:06 2013] [错误] [client :: 1]客户端被服务器配置拒绝:/home/user1/Develop/flask_dbadmin.wsgi


我正在运行OpenSuse 11.4.

python apache mod-wsgi wsgi flask

3
推荐指数
2
解决办法
8842
查看次数