标签: mod-wsgi

ImportError:无法导入名称'app'

我已经为此工作了5个多小时,看起来应该很简单.我按照说明通过mod_wsgi在apache上设置了一个烧瓶应用程序,在完成它们后,我收到一个错误

ImportError: cannot import name 'app'
Run Code Online (Sandbox Code Playgroud)

从行:

from web_tool import app as application
Run Code Online (Sandbox Code Playgroud)

我的wsgi文件名为web_tool.wsgi,看起来像:

import sys  
sys.path.insert(0, "/path/web_tool/src/")
print(sys.version)
print(sys.path)

from web_tool import app as application
Run Code Online (Sandbox Code Playgroud)

我的python版本和系统路径至少是正确的,所以我相信.

然后我的虚拟主机文件存储在apache2/sites-available/default中,如下所示:

WSGIPythonHome /usr/local/opt/python-3.4.1

<VirtualHost *:4000>

    ServerName my.servername.com
    WSGIDaemonProcess web_tool user=my_username group=my_group threads=5
    WSGIScriptAlias / /path/web_tool/src/web_tool/web_tool.wsgi
    WSGIApplicationGroup %{GLOBAL}

    <Directory /path/web_tool/src/web_tool/>
        WSGIProcessGroup cnt_tool
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

如果我的wsgi文件与我的python文件一样被调用,你会看到任何错误吗?我正在运行python 3.4和mod_wsgi 3.4.

python apache mod-wsgi wsgi

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

使用 apache 和 mod_wsgi 时,我在哪里存储我的 django 项目代码?

我正在查看 django 网站上似乎有冲突的信息。

在此页面上:https : //docs.djangoproject.com/en/1.7/intro/tutorial01/

它说:

将任何这些 Python 代码放在您的 Web 服务器的文档根目录中并不是一个好主意,因为它存在人们可以通过 Web 查看您的代码的风险。这对安全不利。

将您的代码放在文档根目录之外的某个目录中,例如 /home/mycode。

但是,在此页面上:https : //docs.djangoproject.com/en/1.7/howto/deployment/wsgi/modwsgi/ 它说这应该是 Apache 的设置方式:

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath /path/to/mysite.com

<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Run Code Online (Sandbox Code Playgroud)

后者不是在 www 根目录中显示项目文件吗?

那么哪个是正确的?前者还是后者?

我已经使用这些 linux 命令来设置项目:

cd /home/personal/network/django
django-admin.py startproject djnet
Run Code Online (Sandbox Code Playgroud)

然后我把它放到 httpd.conf 中:

WSGIScriptAlias / /home/personal/network/django/djnet/wsgi.py
WSGIPythonPath /home/personal/network/django
<Directory /home/personal/network/django/djnet>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Run Code Online (Sandbox Code Playgroud)

这有效,但我担心我引用的第一页中的“这对安全性不利”行。

我应该将生成的项目代码放在django-admin startproject与 Apache 目录分开的目录中吗?如果是这样,我将如何配置 Apache?

apache django mod-wsgi

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

如何在centos7,Apache/2.4.6下使用Python3.5.2编译mod_wsgi 4.5.3

我试过./configure为mod_wsgi 4.5.3,如下所示:

./configure --with-python =/opt/Python352/bin

使用python3.5.2安装/ opt/Python352文件夹的位置.

但是在CentOS 7中,"configure"总是使用二进制"python"(对应于python2.75)而不是二进制"python3"或"python3.5"来构建mod_wsgi.

要求是获取.so文件,最新的mod_wsgi 4.5.3,使用python3.5.2编译并在CentOS 7下的Apache/2.4.6中加载.

谢谢.

python mod-wsgi wsgi python-3.5

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

使用mod_wsgi在Apache2上部署Django-Django项目的正确位置?

我正在尝试在Web服务器上部署我的第一个Django项目。我对服务器配置和Django都是新手,因此我很难找到我的错误。

在网上我看到的大多数教程中,生产服务器上的Django项目都是在/ var / www / myproject中创建的-但是,出于安全原因,Django文档建议将代码放在/ var / www /之外(请参阅:https:/ /docs.djangoproject.com/en/1.9/intro/tutorial01/)。

因此,我将Django项目放在主文件夹的子目录中,Apache无法访问该子目录。我没有向/ var / www添加任何文件,因为没有教程提到这是必要的。

根据这些教程与mod_wsgi的设立Django的后:
https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/modwsgi/
https://www.digitalocean.com/community/tutorials/how -to-serve-django-applications-with-apache-and-mod_wsgi-on-ubuntu-14-04
http ://tutorial.djangogirls.org/en/deploy/),
当我通过浏览器访问网络服务器时,是默认的index.html网站。从我的网络服务器上运行和访问Django的开发服务器也不起作用。在这两种情况下,当我尝试访问管理页面时,都会收到标准的404错误。

我到底应该把一些文件放到/ var / www /吗?

我使用Let'sEncrypt证书,并在使用auto-certbot进行安装期间选择自动将http重定向到https,可能会引起问题吗?

我的一些配置文件(我遗漏了一些未更改的部分/与Django无关):

/etc/apache2/apache2.conf

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
Run Code Online (Sandbox Code Playgroud)

/etc/apache2/sites-available/000-default.conf

    DocumentRoot /var/www/html

    Alias /static /home/me/django/mysite/app/static
    <Directory /home/me/django/mysite/app/static>
            Require all granted
    </Directory>

    <Directory /home/me/django/mysite/mysite>
            <Files wsgi.py>
                    Require all granted
            </Files>
    </Directory>

    WSGIDaemonProcess mysite python-path=/home/me/django/mysite:/home/me/django/djangoenv/lib/python2.7/site-packages
    WSGIProcessGroup mysite
    WSGIScriptAlias / /home/me/django/mysite/mysite/wsgi.py
Run Code Online (Sandbox Code Playgroud)

/home/me/django/mysite/mysite/wsgi.py

import os
import sys

path = '/home/sirhys/django/mysite'  
if path not …
Run Code Online (Sandbox Code Playgroud)

apache deployment django mod-wsgi apache2

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

Apache + mod_wsgi - Python 不加载已安装的模块

我有一个带有 mod_wsgi 的 Apache 服务器,运行 Python 2.7 脚本。该脚本使用通过 pip 安装的 python Pillow 模块。

使用正常运行脚本可以正常python script.py工作,但是当从 wsgi 运行脚本时 - 会为 PIL 引发 ImportError 异常。

这是来自 Apache 的配置/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        WSGIScriptAlias /wsgi/ /home/nitay/Desktop/WebsitePath/Python/wsgi.py

        <Directory "/home/nitay/Desktop/WebsitePath/Python">
            Require all granted
        </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

没有安装virtualenv,这台机器上只有一个Python安装。

我该怎么做才能让 python 找到它安装的模块?

我已经看到了使用 mod_wsgi 的守护进程模式手动定义 python 路径的同一个球场的解决方案。有没有办法在嵌入式模式下这样做?

编辑:Apache 错误日志:

[Wed Nov 02 16:08:02.931400 2016] [wsgi:error] [pid 48202:tid 140100207392512] [client 192.168.1.179:29223] mod_wsgi (pid=48202): Target WSGI script …
Run Code Online (Sandbox Code Playgroud)

python apache mod-wsgi pip python-2.7

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

Django Apache和Virtualenv ImportError:没有名为站点的模块

504页后来自Apache的错误

[info] mod_wsgi (pid=): Python home /var/venv/mybox.
[info] mod_wsgi (pid=): Initializing Python.
ImportError: No module named site
Run Code Online (Sandbox Code Playgroud)

这是一个几乎没有配置的应用程序。

<IfModule mod_wsgi.c>
WSGIDaemonProcess myapp python-home=/var/venv/mybox
WSGIProcessGroup myapp
WSGIScriptAlias / /var/www/html/web/myapp/wsgi.py
WSGISocketPrefix /var/run/wsgi

<Directory /var/www/html/web>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

我可以按照每个帖子和教程进行操作。我在CENTOS6上。使用virutal env python 2.7,默认系统env为2.6

$ ldd /etc/httpd/modules/mod_wsgi.so
  linux-vdso.so.1 =>  (0x00007ffc06174000)
Run Code Online (Sandbox Code Playgroud)

mywsgi.py

 import os,sys     
 from django.core.wsgi import get_wsgi_application     
 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
 sys.path.insert(0,'/var/www/html/web')
 activate_this = '/var/venv/mybox/bin/activate_this.py'
 execfile(activate_this, dict(__file__=activate_this))
 application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)

未设置PYHTONHOME

django mod-wsgi virtualenv centos6

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

如何使Flask默认使用Python 3

我正在尝试在Ubuntu 16服务器(Apache2)上部署Flask项目.在这个项目中,我使用的是Python3库.所以我想将Flask设置为在服务器上使用Python 3.但我真的很难受.这是我在做的事情:

sudo apt-get install apache2
sudo apt-get update
sudo apt-get install libapache2-mod-wsgi-py3 # I think that is how you install wsgi for python3
sudo apt-get install python-flask
sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)

我的项目conf: /etc/apache2/sites-available/project.conf

<VirtualHost *:80>
    ServerName 52.25.54.241 #my IP
    ServerAdmin admin@mywebsite.com 
    WSGIScriptAlias / /var/www/FlaskApps/FlaskApps.wsgi
    <Directory /var/www/FlaskApps/project/>
        Order allow,deny
        Allow from all
    </Directory>
    <Directory /var/www/FlaskApps/project/static/>
        Order allow,deny
        Allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

最后: /var/www/FlaskApps/FlaskApps.wsgi

#! /usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/FlaskApps/project/")

# …
Run Code Online (Sandbox Code Playgroud)

python mod-wsgi flask python-3.x

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

Apache mod_wsgi django 启用多线程多进程

题 :

  1. 我怎么知道我的 apache 服务器是否已经在多进程和多线程模式下运行?因为当我对其进行负载测试时,它给了我相同的结果时间和不同的线程数。我用 25 个线程和 50 个线程运行测试。

  2. 对于多线程/多进程工作,我必须在 Django 代码中做任何调整吗?

  3. 我必须更改 MPM 配置 (/conf/extra/httpd-mpm.conf) 吗?

以下是我的服务器详细信息和配置:

Server redhat enterprise 6.9
Apache server 2.4.33
Postgre 9.6.6
Python 3.6
Virtualbox RAM 8Gb, 2 Core (4 vCpu).
Run Code Online (Sandbox Code Playgroud)

我的 httpd.conf :

Listen 8000

LoadModule wsgi_module modules/mod_wsgi.so

Include conf/extra/httpd-vhosts.conf

WSGIScriptAlias / /home/applmgr/Harpa/HarpaBackend/harpa/wsgi.py
WSGIPythonHome /home/applmgr/Harpa/pyenv_sl
WSGIPythonPath /home/applmgr/Harpa/HarpaBackend
WSGIPassAuthorization On

<Directory /home/applmgr/Harpa/HarpaBackend/harpa>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Run Code Online (Sandbox Code Playgroud)

我的 httpd-vhosts.conf :

<VirtualHost *:8000>

    Alias /static /home/applmgr/Harpa/HarpaBackend/static
    <Directory /home/applmgr/Harpa/HarpaBackend/static>
        Require all granted
    </Directory>

    WSGIDaemonProcess harpa …
Run Code Online (Sandbox Code Playgroud)

apache django multithreading mod-wsgi

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

Apache + mod_wsgi + flask app:由于收到 SIGUSR1 信号而正常重启

我有flask/ python2.7/ apache2/ mod_wsgiapp 并且定期我可以在 apache 日志中看到以下几行并且我的应用程序重新启动:

[mpm_event:notice] AH00493: SIGUSR1 received.  Doing graceful restart
[wsgi:error] Joining threads
Run Code Online (Sandbox Code Playgroud)

我知道如果有segfault会发生这种“正常重启” ,但据我所知,在我的情况下没有 segfault (在“执行正常重启”行之前的日志中没有相应的行)。或者可能没有记录此类事件......无论如何我怀疑这是 apache2 问题,因为mpm_event是 apache2 内部实体(docs)。

所以我的问题是:

1)如何检查我的情况有什么问题?

2)如果这是默认行为(例如,如果没有活动则重新启动)而不是问题 - 如何配置它以及在哪里配置?

谢谢!

python apache mod-wsgi apache2 flask

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

如何修复 Apache WSGI 上的 FastAPI 应用程序错误?

我正在尝试在运行 Apache 的服务器上运行 FastAPI 应用程序。

我已经相应地配置了 Apache 虚拟主机文件

<VirtualHost *:80>
        ServerAdmin admin@example.com
        ServerName fastapi.example.com
        ServerAlias fastapi.example.com
        DocumentRoot /var/www/fastapi
        ErrorLog ${APACHE_LOG_DIR}/fastapi_error.log
        CustomLog ${APACHE_LOG_DIR}/fastapi_access.log combined
        WSGIScriptAlias / /var/www/fastapi/main.wsgi
        <Directory "/var/www/fastapi">
                AllowOverride All
        </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

并创建了 main.wsgi 和 main.py 文件。

主文件

#! /usr/bin/python3.7

import logging
import sys
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, '/var/www/fastapi/')
from main import app as application
application.secret_key = 'alibaba'
Run Code Online (Sandbox Code Playgroud)

主文件

from typing import Optional
from fastapi import FastAPI
app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] …
Run Code Online (Sandbox Code Playgroud)

mod-wsgi apache2 fastapi

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