我已经为此工作了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.
我正在查看 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?
我试过./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中加载.
谢谢.
我正在尝试在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) 我有一个带有 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) 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
我正在尝试在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) 题 :
我怎么知道我的 apache 服务器是否已经在多进程和多线程模式下运行?因为当我对其进行负载测试时,它给了我相同的结果时间和不同的线程数。我用 25 个线程和 50 个线程运行测试。
对于多线程/多进程工作,我必须在 Django 代码中做任何调整吗?
我必须更改 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) 我有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)如果这是默认行为(例如,如果没有活动则重新启动)而不是问题 - 如何配置它以及在哪里配置?
谢谢!
<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 ×10
apache ×6
python ×5
django ×4
apache2 ×3
flask ×2
wsgi ×2
centos6 ×1
deployment ×1
fastapi ×1
pip ×1
python-2.7 ×1
python-3.5 ×1
python-3.x ×1
virtualenv ×1