问题摘要
我试图让Django应用程序代码在运行它的服务器上更新。我已经上传了更新的代码(一个.py
文件),但是更新的代码没有显示在应用程序的行为中。我已经试了好几次试图解决这个问题。我将在下面回顾这些尝试,希望这将有助于诊断我需要做什么。在
下面是一些有关应用程序的附加详细信息,以帮助提供问题的上下文。
我不是编写应用程序的开发人员,我受雇于维护和更新。遗憾的是,没有提供文档,代码注释也很少。
说到Django我还是有点生疏。
此问题发生在生产服务器上,因此必须注意尽量减少停机时间。由于以上两个原因,我不完全有信心,我可以重新启动服务器,如果它关闭。
Django版本:1.7
正在使用的服务器:gunicorn+nginx
应用程序的工作方式很简单。用户下单后,会触发电子邮件发送。我修改的代码也很简单。在包含电子邮件内容的字符串中添加了一个额外的html段落。测试应用程序时,不会添加此新字符串。代码没有更新。在
应用程序的目录结构
我用appname
根文件夹
appname
py2_appname
staticfiles
py2_应用程序名
它包含包含的包和二进制文件
^{pr2}$appname文件夹
包含应用程序代码
├── 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
我已经做了一些尝试来解决这个问题。
删除原始编译文件。这将强制在执行生成电子邮件的脚本时生成一个新的。这并没有发生。未创建新的.pyc文件。应用程序仍像往常一样正常工作。这似乎意味着缓存在某个地方的执行代码。在
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
另一个建议是通过执行命令touch来修改应用程序wsgi file last modified meta字段。这会将上次修改的时间更新为当前时间,但不会更改文件的内容。这不起作用,但可能我没有更新正确的文件。Im更新文件名为:wsgi.py. 它在appname文件夹中(见上文)
以下是wsgi.py
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "appname.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
在设置.py文件,也在appname文件夹中,只有一行代码提到了wsgi:
WSGI_APPLICATION = 'appname.wsgi.application'
这是正确的文件来应用touch以便我的服务器应用代码更改吗?在
在服务器上运行的进程(从ps-aux,命令列)
/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
请注意,gunicorn是从py2_appname运行的。这是一个比appname高一级的文件夹,包含应用程序中使用的二进制文件。在
让脚本
admin_email.py
重新编译的技巧是重新启动gunicorn
。这可以通过killall
命令完成。要重新启动gunicorn
请执行以下操作:这必须从执行django脚本
manage.py
的目录中执行。在相关问题 更多 >
编程相关推荐