我一直在使用WSGI开发部署在Apache服务器上的Django Web应用程序,一切都进展顺利.今天,我对我的应用程序进行了一些小的更改,admin.py试图自定义内置的Django Admin界面,并且最初产生了语法错误(一个未闭合的括号).这意味着当我触摸wsgi.py并加载代码时(我在我的虚拟主机上以守护进程模式运行WSGI),我的网站被替换为内部服务器错误,因为WSGI在遇到语法错误时停止了.
所以我修复了语法错误,检查了我没有更多manage.py check,并触及wsgi.py重新部署.但我的网站仍然显示内部服务器错误!检查Apache日志,这是我看到的:
[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Create interpreter 'quotes.cs.cornell.edu|'.
[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Adding '/extra/www/html/quotes/quotes_django' to path.
[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Adding '/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/' to path.
[Sun Nov 23 13:52:46 2014] [info] [client 128.84.33.19] mod_wsgi (pid=19093, process='quotes.cs.cornell.edu',
application='quotes.cs.cornell.edu|'): Loading WSGI script '/extra/www/html/quotes/quotes_django/quotes_django/
wsgi.py'.
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Target WSGI script '/extra/www/html/ …Run Code Online (Sandbox Code Playgroud) 我的简单Django应用程序在调试模式下工作正常(manage.py runserver),并且在我的开发箱上的WSGI + Apache下工作,但当我推送到EC2时,我开始接收Bad Request (400)任何URL的间歇性(10-80%的时间)错误我试图查看(无论是在我的应用程序中还是在Django管理员中.
我在哪里可以找到关于此的调试信息?没有任何东西出现/var/log/apache2/error.log,即使有LogLevel=info.我检查了版本,记录了Request环境(参见ModWSGI Debugging Tips),看不出有什么重大差异.
剩下的一个想法是,我正在使用Ubuntu 12.04(libapache2-mod-wsgi 3.3-4build1)的mod_wsgi,它是针对Python 2.7.1构建的; 我有Python 2.7.3.Django是1.6,比Ubuntu Precise版本更新.我不愿意从源代码开始构建软件包,因为它很难清理,这看起来像是次要的版本更改......
谢谢您的帮助.
(供参考,这里是Apache配置和WSGI应用程序)
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
WSGIScriptAlias /rz /usr/local/share/rz/rz.wsgi
...
Run Code Online (Sandbox Code Playgroud)
import os
import sys
import django.core.handlers.wsgi
import pprint
path = '/usr/local/share/rz'
if path not in sys.path:
sys.path.insert(0, path)
os.environ['DJANGO_SETTINGS_MODULE'] = 'rz.settings'
class LoggingMiddleware:
def __init__(self, application):
self.__application = application
def __call__(self, environ, start_response):
errors = environ['wsgi.errors']
pprint.pprint(('REQUEST', environ), stream=errors) …Run Code Online (Sandbox Code Playgroud) 我试图在亚马逊的EC2实例上发布我的网站,并且我一直收到500错误.我真的不知道为什么.
//日志文件
[Sun Feb 17 23:12:48.066802 2013] mod_wsgi (pid=2102): Target WSGI script '/srv/www/app/poka/apache/wsgi.py' cannot be loaded as Python module.
[Sun Feb 17 23:12:48.066840 2013] mod_wsgi (pid=2102): Exception occurred processing WSGI script '/srv/www/app/poka/apache/wsgi.py'.
[Sun Feb 17 23:12:48.066864 2013] Traceback (most recent call last):
[Sun Feb 17 23:12:48.066889 2013] File "/srv/www/mysite/poka/apache/wsgi.py", line 26, in <module>
[Sun Feb 17 23:12:48.066920 2013] from django.core.wsgi import get_wsgi_application
[Sun Feb 17 23:12:48.066945 2013] ImportError: No module named django.core.wsgi
Run Code Online (Sandbox Code Playgroud)
// Apache配置文件
WSGIScriptAlias / /srv/www/app/mysite/apache/wsgi.py
WSGIDaemonProcess mysite python-path=/srv/www/app/mysite:/home/ec2-user/.virtualenvs/mysite-main/lib/python2.7/site-packages …Run Code Online (Sandbox Code Playgroud) 我这样配置了我的开发服务器:
Ubuntu,Apache,mod_wsgi,Python 2.6
我从连接到它的另一台计算机上工作.
除非我重新启动Apache,否则大多数情况下更改不会影响应用程序.在某些情况下,更改会在不重新启动Web服务器的情况下生效,但在让我们说3或4页加载后,应用程序的行为可能与更改之前的行为相似.
到现在为止我只是重新加载每次apache,因为我在这里有我的开发服务器,但是HELL过了一段时间后非常讨厌.我怎么能避免这个?
我无法使用开发服务器,因为我需要一个尽可能接近生产环境的环境.
谢谢
我已经尝试了好几天在Amazon Web Services的Elastic Beanstalk下设置Django.我认为我遇到的问题是这个问题:
ERROR - Your WSGIPath refers to a file that does not exist.
Run Code Online (Sandbox Code Playgroud)
我按照这里的教程进行了一直顺利,直到第6步结束,但是除了第5步#2的通用Elastic Beanstalk页面之外,我不能为我的生活展示任何东西.我跑的时候
./manage.py runserver
Run Code Online (Sandbox Code Playgroud)
在我的本地计算机上,一切正常,但我无法部署该页面.我首先尝试使用自己编写的小型Django网站.它没有用,所以我删除了我所做的一切并再次尝试,但是没有用,所以我删除了所有这些并再次尝试使用新的django安装.我尝试了很多次摆弄小东西,但我想我错过了一些重要的东西.
我添加了一个python.config文件,如本教程中所述.
这是我的文件结构:
-.git/
-.mysite/
-myapp/
-__init__.py
-models.py
-tests.py
-views.py
-mysite/
-__init__.py
-settings.py
-urls.py
-wsgi.py
-.ebextensions/
-python.config
-manage.py
-mysite.db
-requirements.txt
Run Code Online (Sandbox Code Playgroud)
来自我的settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'mysite.db',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
Run Code Online (Sandbox Code Playgroud)
这是python.config:
container_commands: 01_syncdb:
command: "django-admin.py syncdb --noinput"
leader_only: true
option_settings:
- namespace: aws:elasticbeanstalk:container:python
option_name: …Run Code Online (Sandbox Code Playgroud) django wsgi amazon-web-services django-wsgi amazon-elastic-beanstalk
我正在尝试使用uwsgi运行Django应用程序.我发现的大多数指令都引用了"--wsgi-file"和"--module"来指定应用程序,但是"uwsgi"没有提到这些选项,当我尝试使用它们时:
uwsgi -s /tmp/uwsgi.sock --master --module myapp.wsgi
uwsgi: unrecognized option '--module'
getopt_long() error
Run Code Online (Sandbox Code Playgroud)
和
uwsgi -s /tmp/uwsgi.sock --master --wsgi-file myapp/wsgi.py
uwsgi: unrecognized option '--wsgi-file'
getopt_long() error
Run Code Online (Sandbox Code Playgroud)
当我没有任何一个运行时,我得到:
uwsgi -s /tmp/uwsgi.sock --master
*** Starting uWSGI 2.0.9 (64bit) on [Fri Jul 10 11:12:04 2015] ***
compiled with version: 4.4.7 20120313 (Red Hat 4.4.7-11) on 23 April 2015 19:31:15
os: Linux-2.6.32-504.16.2.el6.x86_64 #1 SMP Tue Mar 10 17:01:00 EDT 2015
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 2 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用apache和mod_wsgi在我的linode服务器上部署我的Django应用程序.
file: /srv/www/example.com/djproj/django.wsgi
import os
import sys
sys.path.append('/srv/www/example.com/djproj')
os.environ['PYTHON_EGG_CACHE'] = '/srv/www/example.com/.python-egg'
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Run Code Online (Sandbox Code Playgroud)
file: /etc/apache2/sites-available/example.com
/etc/apache2/sites-available/example.com
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /srv/www/example.com/public_html
WSGIScriptAlias / /srv/www/example.com/djproj/django.wsgi
<Directory "/srv/www/example.com/djproj">
Order allow,deny
Allow from all
</Directory>
ErrorLog /srv/www/example.com/logs/error.log
CustomLog /srv/www/example.com/logs/access.log combined
Run Code Online (Sandbox Code Playgroud)
当我访问/我的网站时,我收到此错误:
Environment:
Request Method: GET
Request URL: http://example.com/
Django Version: 1.3
Python Version: 2.6.6
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/usr/local/lib/python2.6/dist-packages/Django-1.3- …Run Code Online (Sandbox Code Playgroud) 我使用嵌入式wsgi在apache上安装了django.我没有在机器上有根.
在部署新的源代码时,如何告诉apache重新加载python实例?
我尝试删除所有.pyc文件,它仍然运行旧代码.
我正在尝试在 heroku 上运行我的 django 应用程序。
文件夹结构:
app/
Procfile
docs/
...
project/
manage.py
wsgi.py
<django apps>
Run Code Online (Sandbox Code Playgroud)
配置文件
web: gunicorn --pythonpath="$PWD/project" wsgi:application --log-file=-
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
2015-02-16T16:05:00.646316+00:00 heroku[web.1]: Starting process with command `gunicorn --pythonpath="$PWD/project" wsgi:application --log-file=-`
2015-02-16T16:05:02.697633+00:00 app[web.1]: [2015-02-16 16:05:02 +0000] [3] [INFO] Listening at: http://0.0.0.0:44846 (3)
2015-02-16T16:05:02.709567+00:00 app[web.1]: [2015-02-16 16:05:02 +0000] [9] [INFO] Booting worker with pid: 9
2015-02-16T16:05:02.696968+00:00 app[web.1]: [2015-02-16 16:05:02 +0000] [3] [INFO] Starting gunicorn 19.1.1
2015-02-16T16:05:02.697790+00:00 app[web.1]: [2015-02-16 16:05:02 +0000] [3] [INFO] Using worker: sync
2015-02-16T16:05:02.793753+00:00 app[web.1]: [2015-02-16 16:05:02 +0000] …Run Code Online (Sandbox Code Playgroud) Matplotlib 在 /var/www/.config/matplotlib 创建了一个临时 config/cache 目录,因为默认路径 (/tmp/matplotlib-b33qbx_v) 不是可写目录;强烈建议将 MPLCONFIGDIR 环境变量设置为可写目录,特别是为了加快 Matplotlib 的导入速度并更好地支持多处理。
这是我在 error.log 文件和浏览器上的 504 Gateway Time out error 中收到的消息。请有人帮助解决这个问题。
django-wsgi ×10
django ×9
apache ×4
wsgi ×4
mod-wsgi ×3
python ×3
amazon-ec2 ×1
deployment ×1
heroku ×1
importerror ×1
matplotlib ×1
python-3.x ×1
uwsgi ×1