除非Apache重新加载,否则Django urls.py不会更新

时间:2019-02-16 15:05:04

标签: django apache mod-wsgi wsgi django-wsgi

除非重新加载Apache,否则似乎忽略了Django项目中对urls.py文件的更改。任何想法为什么会这样?这是我重要的宿主文件:

<IfModule mod_ssl.c>
  <VirtualHost www.mydomain.com:443>
    ServerName www.mydomain.com
    ServerAdmin myaddress@mydomain.com

    WSGIScriptAlias / /var/www/html/www.mydomain.com/myproject/wsgi.py
    WSGIDaemonProcess myproject python-path=/var/www/html/www.mydomain.com:/var/www/html/www.mydomain.com/env/lib/python3.6/site-packages
    WSGIProcessGroup myproject

    <Directory /var/www/html/myproject>
       <Files wsgi.py>
          Order deny,allow
          Allow from all
       </Files>
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # Let's Encrypt files
    SSLCertificateFile /etc/letsencrypt/live/www.mydomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/www.mydomain.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
  </VirtualHost>
</IfModule>

否则,更改会立即应用,因为我可以通过django-extensionsshow_urls命令进行检查。

1 个答案:

答案 0 :(得分:-1)

因为python文件被缓存为字节码,而uwsgi正在使用它们。

您是否注意到,只要您运行python文件,就会自动生成 __ pycache __ *。pyc 文件,这些文件是python字节码文件。

您需要在uwsgi配置文件中设置触摸重新加载功能,以替换那些缓存的文件并生成新的文件,以便对最新编辑进行更改。

在您的uwsgi配置文件中进行如下设置:

[uwsgi]

touch-reload = /path/to/your/django/project/reload.ini

如果您没有自动重新加载uwsgi配置文件更改功能,则需要重新加载应用程序或重新启动uwsgi才能对新配置生效。

只要更改代码,就可以使用touch命令重新加载。

$ touch /path/to/your/django/project/reload.ini

无需重新加载或重新启动Apache。

文档:The Art of Graceful Reloading

如果您使用git推送代码,则可以使用post-receive挂钩自动完成此操作。

此处类似的线程How to configure Git post commit hook