一旦我完成并测试了一个模块,我想在生产服务器上部署我的应用程序。到目前为止,app正在使用Django 1.9.2框架(使用Python 3.5)开发嵌入式服务器。我在Centos 7上通过Apache通过mod_wsgi部署了Django。 我在部署后做了一些测试。似乎Templatetags无法正常工作,#34; 0"返回(或根本没有计算?)到模板,而mod_wsgi正在使用中。即使我将任何常量添加到templatetag(下面)并尝试将其返回到模板,也只是为了测试它是如何工作的。 我使用相同的机器(Linux)进行了完全相同的检查,但我使用了嵌入式服务器。在嵌入式服务器的情况下,所有信息都被正确传递和计数。 我认为这是与权限相关的问题。我仔细检查了这一点,似乎正确设置了所有文件访问权限。
<VirtualHost *:80>
ServerName nid.example.com
<Directory /home/nid/nid/nid>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess nid python-path=/home/nid/nid:/home/nid/nid-venv/lib/python3.4/site-packages
WSGIProcessGroup nid
WSGIScriptAlias / /home/nid/nid/nid/wsgi.py
</VirtualHost>
templatetag:
from django import template
import datetime
register = template.Library()
@register.assignment_tag()
def count_expire_days(end_date, renew_date):
last_valid_day = end_date
first_renew_day = renew_date
today = datetime.date.today()
diff_last_day = last_valid_day - today
diff_whole_period = last_valid_day - first_renew_day
period = diff_whole_period.days
expire_days = diff_last_day.days
percentage = (expire_days/period)*100
return int(percentage)
我正在玩文件权限,但没有运气。 有什么不对?如何调试Django templatetags,了解为什么这不起作用?
答案 0 :(得分:0)
这个问题非常隐蔽。 我使用Centos 7.默认情况下它运行Python 2.7。即使我们安装Python 3.4(现在最新的Centos软件包)和所有周围的软件包,还有很多工作要做。我发现Django表明它仍然使用Python 2.7,而整个virtualenv是纯Python 3.4。
根本原因:过时的 mod_wsgi Apache模块。它的原始版本 3.4 ,而最新版本(支持Python 3) 4.4.22 。要解决此问题,您需要从源代码编译mod_wsgi并将其加载到Apache中。 更改后,应用程序正在按预期工作。所有值都正确计算。这不起作用的原因是python 2.7和3.4处理数据的方式不同。