标签: mod-wsgi

从mod_python转换为mod_wsgi

我的网站是用Python编写的,目前在Apache的mod_python下运行.最近我不得不加入一些让我认为可能值得将网站转换为mod_wsgi的丑陋黑客.但我已经习惯了使用一些mod_python的的工具类的,特别是FieldStorageSession(有时Cookie),并从扫描PEP 333,我看不出有任何等同于这些.(这并不奇怪,因为我了解这些实用程序不属于WSGI规范)

问题是,我可以在WSGI中使用这些mod_python实用程序类的"标准"(即通常接受的)替换,还是我/我应该自己编写?

(仅供参考:目前正在使用Python 2.5)

python mod-wsgi mod-python

11
推荐指数
1
解决办法
5384
查看次数

在使用mod_wsgi的Apache上使用Django时必须重新启动Apache

我正在用Django创建一个Web应用程序.由于我非常熟悉Apache,因此我设置了我的开发环境,让Django使用mod_wsgi运行Apache.我唯一的烦恼就是每次更改代码时都必须重新启动Apache.有没有解决的办法?

python apache django mod-wsgi restart

11
推荐指数
1
解决办法
6475
查看次数

两个Django项目同时运行,mod_wsgi运行werid

我正在尝试同时运行两个Django项目.我碰巧使用mod_wsgi,发现该网站表现得很奇怪.也许会有一个解决方法,但我想知道我错过了什么,以及如何解决问题.

在apache配置中

# Setup the Python environment
# As root owns basically everything on a Amazon AMI and root
# cannot be used. Create a folder under /var/run/wsgi
# with the owner as ec2-user and group ec2-user.
WSGISocketPrefix /var/run/wsgi
# Call your daemon process a name
WSGIDaemonProcess pydaemon processes=1 threads=5
# Call your daemon process group a name
WSGIProcessGroup pydaemon
# Point to where the handler file is. This will be different
# If you are using some other framework. …
Run Code Online (Sandbox Code Playgroud)

django mod-wsgi

11
推荐指数
1
解决办法
4857
查看次数

Apache 403同时提供Django静态文件

我查看了很多相关的帖子,但似乎没有任何帮助.
相关信息:

Django版本 - 1.4

Apache版本 - 2.2

Python版本 - 2.7

操作系统 - Xubuntu 12.04

DB - Mysql

我正在尝试让Apache同时提供django app和静态文件.管理站点中的问题变得明显,无法显示任何CSS样式或图像.我的管理网站目前看起来像:

(好吧,我会包含一个图像,但堆栈溢出不让我.只需说它看起来像其他人发布在这个主题上的管理页面,请参阅Apache不提供django管理静态文件 )

像我的登录页面和一些动态内容这样的应用程序工作正常,但是当我尝试提供静态内容时,我收到403错误.另外,当我尝试通过查看管理页面的渲染html并单击指向样式表的链接时手动导航到样式表

http://localhost/static/admin/css/base.css 
Run Code Online (Sandbox Code Playgroud)

我收到403错误.我可以在终端中导航,并更改了文件夹的权限,以便Apache的www-data用户显式访问所有文件.

以下是我的httpd.conf的相关部分:

#AliasMatch ^/([^/]*\.css) /usr/local/wsgi/static/styles/$1

Alias /media/ "/usr/local/wsgi/media/"
Alias /static/ "/usr/local/wsgi/static/"

<Directory "/usr/local/wsgi/static">
Order deny,allow
Allow from all
</Directory>

<Directory "/usr/local/wsgi/media">
Order deny,allow
Allow from all
</Directory>
WSGIScriptAlias / "/home/noah/Documents/Web/Basic/apache/django.wsgi"

<Directory "/usr/local/wsgi/scripts">
Order allow,deny
Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)

根据朋友的建议,我还将上述内容复制到我的网站 - 可用默认值:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    TypesConfig /etc/mime.types
    <Directory />
        Options FollowSymLinks
        AllowOverride None …
Run Code Online (Sandbox Code Playgroud)

apache django static mod-wsgi django-admin

11
推荐指数
2
解决办法
9328
查看次数

Apache挂起了mod_wsgi + django

我已经运行了Apache + mod_wsgi + django.出于某种原因,服务器上的某些内容发生了变化,现在apache完全挂起 - 它停止响应所有其他请求,并且必须停止并启动 - 当我发布请求时.最终我们看到"脚本标题过早结束:django.wsgi"错误.

我们做了一个strace,我看到一件似乎可疑的事情是"GATEWAY_INTERFACE\0CGI/1.1\0SERVER_PROTOCOL ......"(我们也看到发布了关机.)

"GATEWAY_INTERFACE\0CGI/1.1"是否指定它是为CGI而不是WSGI设置的?(我已经读过,如果将脚本设置为CGI,则会导致脚本过早结束.)

我们的虚拟主机指定:

WSGIDaemonProcess [host] threads=25
WSGIProcessGroup [host]
WSGIScriptAlias / /path/to/apache/django.wsgi
Run Code Online (Sandbox Code Playgroud)

我只是在加载WSGI模块的httpd.conf中看到与CGI无关.

apache django mod-wsgi

11
推荐指数
1
解决办法
2149
查看次数

python flask before_request exclude/static目录

感谢下面的答案,我有一个before_request功能,/login如果用户尚未登录,则会将用户重定向到:

请求前烧瓶 - 为特定路线添加例外

这是我的before_request的副本:

@app.before_request
def before_request():
    if 'logged_in' not in session and request.endpoint != 'login':
        return redirect(url_for('login'))
Run Code Online (Sandbox Code Playgroud)

除非用户已登录,否则不会提供静态目录中的文件.

在我的/login页面上,我从/static目录中获取一个css文件,但由于这个原因无法加载before_request.

我使用apache mod_wsgi部署了这个应用程序,在我的apache配置文件中,我甚至将该/static目录作为站点的DocumentRoot 包含在内.

如何/static在没有用户登录的情况下添加异常来提供应用程序的文件,但仍然将其before_request用于我的flask应用程序定义的路由?

python mod-wsgi flask

11
推荐指数
2
解决办法
4631
查看次数

使用virtualenv和mod_wsgi的Apache:ImportError:没有名为'django'的模块

我正在尝试使用以下Apache配置为django项目提供服务:

Apache虚拟主机配置:

<VirtualHost *>
    ServerName servername

    [...]

    <Directory "/path/to/project/project">
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess project python-path=/path/to/project:/path/to/Envs/venv/lib/python3.5/site-packages                           
    WSGIScriptAlias / /path/to/project/project/wsgi.py

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

我也有以下wsgi.py:

import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "example.settings")
application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)

我没有问题来提供STATIC文件和MEDIA文件.

我还检查了权限并尝试递归使用755,然后777到我的virtualenv的site-package目录.它没用.

但是当我试图访问我的网站的根目录时,我得到以下内容:

from django.core.wsgi import get_wsgi_application
ImportError: No module named 'django'
Run Code Online (Sandbox Code Playgroud)

我猜这是一个Python路径相关的问题,因为django安装在我的virtualenv中.但我添加了相关的python路径WSGIDaemonProcesspython-path属性,所以我不明白为什么它不起作用.

我也猜测我可以通过使用site模块将相关目录添加到我的wsgi.py中的Python路径中,但我想了解为什么我尝试的Apache配置还不够.我错过了什么?

apache django mod-wsgi pythonpath

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

手动停止mod_wsgi启动的进程,并监视正在运行的进程数

知道不建议在生产中运行Bottle或Flask应用程序,python myapp.py --port=80因为它只是一个开发服务器.

我认为也不建议运行它python myapp.py --port=5000并将其链接到Apache:RewriteEngine On,RewriteRule /(.*) http://localhost:5000/$1 [P,L](或者我错了?),因为WSGI是首选.

所以我现在正在设置Python app <-> mod_wsgi <-> Apache(没有gunicorn或其他工具来保持简单).

问题:当使用WSGI时,我知道它是Apache,mod_wsgi并且会myapp.py在请求到来时自动启动/停止运行足够的进程,但是:

  1. 我该如何手动停止这些流程?
  2. 更一般地说,有没有办法监控它们/知道mod_wsgi启动的进程当前还在运行多少?(其中一个原因是检查进程是否在请求后终止或是否继续运行)

例:

  • 我做了一些更改myapp.py,并且我想重新启动运行它的所有进程,这些进程已由mod_wsgi启动(注意:我知道mod_wsgi可以观察源代码的更改,并重新启动,但这仅适用于对其进行的更改. wsgi文件,而不是.py文件.我已经读过touch myapp.wsgi可以解决这个问题,但更一般地说我希望能够手动停止并重新启动)

  • 我想暂时停止整个应用程序myapp.py(它的所有实例)

我不想用service apache2 stop它,因为我也用Apache 运行其他网站,而不仅仅是这个(我有几个VirtualHosts).出于同样的原因(我使用Apache运行其他网站,而某些客户端可能同时下载1 GB文件),我不希望这样做service apache2 restart会对使用Apache的所有网站产生影响.

我正在寻找比kill pidSIGTERM等更清洁的方式(因为我读过它不建议在这种情况下使用信号).

注意:我已经阅读了如何从mod_wsgi执行优雅的应用程序关闭,它有所帮助,但这里是补充问题,而不是重复.


我目前的Python Bottle + Apache …

python apache mod-wsgi wsgi bottle

11
推荐指数
1
解决办法
1137
查看次数

Django + mod_wsgi + apache2:服务器挂起

我正在使用mod_wsgi在apache2上部署一个django项目,但问题是服务器不提供页面并在发出错误之前挂起10分钟:

End of script output before headers
Run Code Online (Sandbox Code Playgroud)

这是我的site-available/000-default.conf:

ServerAdmin webmaster@localhost
DocumentRoot /home/artfact/arTfact_webSite/
Alias /static /home/artfact/arTfact_webSite/static
        <Directory /home/artfact/arTfact_webSite/static>
         Order allow,deny
         Allow from all
         Require all granted
        </Directory>

      <Directory /home/artfact/arTfact_webSite>
         Order allow,deny
         Allow from all
         <Files wsgi.py>
                        Require all granted
         </Files>
      </Directory>

        WSGIDaemonProcess artfact_site processes=5 threads=25  python-path=/home/artfact/anaconda/lib/python2.7/site-packages/:/home/artfact/arTfact_webSite

        WSGIProcessGroup artfact_site
        WSGIScriptAlias / /home/artfact/arTfact_webSite/arTfact_webSite/wsgi.py
Run Code Online (Sandbox Code Playgroud)

settings.py

"""
Django settings for arTfact_webSite project.

Generated by 'django-admin startproject' using Django 1.8.5.

For more information on this file, see
https://docs.djangoproject.com/en/1.8/topics/settings/

For the full list of settings …
Run Code Online (Sandbox Code Playgroud)

python apache django mod-wsgi

10
推荐指数
1
解决办法
767
查看次数

mod_wsgi:无法统计 Python home 和 ImportError:没有名为“encodings”的模块

 我正在尝试在 Python 3.5.2 上使用 Django 和 mod_wsgi 在 Apache 2.4 上构建一个网站。但是当 apache 守护进程 httpd 启动时,会在 /var/log/httpd/error_log 上输出以下错误信息。

[Fri Sep 16 17:44:57.145900 2016] [wsgi:warn] [pid 20593] (13)Permission denied: mod_wsgi (pid=20593): Unable to stat Python home /home/ec2-user/.pyenv/versions/ 3.5.2. Python 解释器可能无法正确初始化。验证提供的路径和整个路径的访问权限。
致命的 Python 错误:Py_Initialize:无法获取语言环境编码
ImportError:没有名为“encodings”的模块

 所以,我探索了一些关于类似问题的文章,例如

但上述错误信息的原因尚未解决。
 请注明需要检查的要点或需要阅读的文件等。

我的开发环境如下。

(1) 主机和操作系统

  • 托管服务:亚马逊 AWS EC2
  • 操作系统:Amazon Linux AMI 版本 2016.03

(2) Django 项目

 我在/home/ec2-user/django-sites目录中创建了名为testprj 的Django 项目 ,用户帐户为ec2-user

[ec2-user@MyEC2 django-sites]$ pwd
/home/ec2-user/django-sites …
Run Code Online (Sandbox Code Playgroud)

python apache django mod-wsgi

10
推荐指数
1
解决办法
9764
查看次数