除非重新加载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-extensions的show_urls
命令进行检查。
答案 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挂钩自动完成此操作。