Python Django应用程序行为中未反映代码更新。为什么会发生这种情况?可以采取哪些措施来解决此问题?
问题摘要Python Django应用程序行为中未反映代码更新。为什么会发生这种情况?可以采取哪些措施来解决此问题?,python,django,nginx,Python,Django,Nginx,问题摘要 import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "appname.settings") from django.core.wsgi import get_wsgi_application application = get_wsgi_application() 我正在尝试获取Django应用程序代码,以便在其运行的服务器上进行更新。我已经上传了更新的代码(一个.py文件),但是更新的
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "appname.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
我正在尝试获取Django应用程序代码,以便在其运行的服务器上进行更新。我已经上传了更新的代码(一个.py
文件),但是更新的代码没有显示在应用程序的行为中。我已经尝试了好几次来解决这个问题。我将在下面回顾这些尝试,希望这将有助于诊断我需要做什么
以下是有关该应用程序的一些附加详细信息,有助于为问题提供上下文。
- 我不是编写应用程序的开发人员,我是为维护和更新而受雇的。遗憾的是,没有给出任何文档,很少有代码注释
- 说到Django,我还是有点生疏
- 此问题发生在生产服务器上,因此必须注意尽量减少停机时间。由于以上两个原因,如果服务器出现故障,我不能完全相信我能重新启动服务器
- Django版本:1.7
- 正在使用的服务器:gunicorn+nginx
/path/to/appenv/py2_appname/bin/python /opt/www/py2_appname/bin/gunicorn appname.wsgi --bind=127.0.0.1:8001 --workers=3
/path/to/appenv/py2_appname/bin/python /opt/www/py2_appname/bin/gunicorn appname.wsgi --bind=127.0.0.1:8001 --workers=3
/path/to/appenv/py2_appname/bin/python /opt/www/py2_appname/bin/gunicorn appname.wsgi --bind=127.0.0.1:8001 --workers=3
/path/to/appenv/py2_appname/bin/python /opt/www/py2_appname/bin/gunicorn appname.wsgi --bind=127.0.0.1:8001 --workers=3
nginx: master process /usr/sbin/nginx
nginx: worker process
nginx: worker process
nginx: worker process
nginx: worker process
我正在用appname替换应用程序名称
根文件夹
appname
py2_appname
staticfiles
py2_appname
它包含包含的包和二进制文件
bin
include
lib
local
appname文件夹
appname
py2_appname
staticfiles
这包含应用程序代码
├── accounts
│ └── migrations
├── admin_keys
├── emails
├── errors
│ └── migrations
├── main_site
│ └── migrations
├── appname
│ └── __pycache__
├── appname_admin
│ └── migrations
├── promotions
│ └── migrations
├── signaling
│ ├── migrations
│ └── templates
│ └── signal_email
├── static
│ ├── css
│ ├── fonts
│ ├── images
│ │ ├── email
│ │ ├── main
│ │ └── thumbnails
│ └── js
│ └── locales
├── templates
│ ├── accounts
│ ├── errors
│ ├── _layouts
│ ├── mainsite
│ ├── appname_admin
│ └── test
└── testing
└── migrations
我已经做了一些尝试来解决这个问题。
Here are the original files:
-rw-r--r-- 1 ubuntu ubuntu 47872 Jul 13 04:39 admin_email.py
-rw-r--r-- 1 root root 48212 Feb 10 03:12 admin_email.pyc
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "appname.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
在同样位于appname文件夹中的settings.py文件中,只有一行代码提到了wsgi:
WSGI_APPLICATION = 'appname.wsgi.application'
这是应用触摸的正确文件,以便我的服务器应用代码更改吗
请注意,gunicorn是从py2_appname运行的。这是一个比appname高一级的文件夹,包含应用程序中使用的二进制文件。让脚本
admin\u email.py
重新编译的诀窍是重新启动gunicorn
。这可以通过killall
命令完成。要重新启动gunicorn,请执行:
gunicorn appname.wsgi --bind=127.0.0.1:8001 --workers=3 --daemon
这必须从django脚本
manage.py
执行的目录中执行。通过重新启动服务器…您重新启动了gunicorn吗?我使用uwsgi,更新代码后需要重新启动服务器。是的,如果您对如何重新启动gunicorn
有任何建议,我将不胜感激。我希望这将更新应用程序的工作方式。请注意上面显示的gunicorn
过程。如果需要重新启动,我希望能够运行相同的进程。由于这是一台prod服务器,我想100%确定我能够正确重启。另外,检查supervisor您应该能够从那里重新启动进程,这样,命令可能正是从ps:/path/to/appenv/py2_appname/bin/python/opt/www/py2_appname/bin/gunicorn appname.wsgi--bind=127.0.0.1:8001--workers=3中显示的命令