mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.5.x] Warned that request_finished isn't sent by some buggy setups.
				
					
				
			Older versions of uWSGI and Sentry's middleware do not adhere to
the WSGI spec and cause the `request_finished` signal to never
fire. Added notes to the appropriate places in the docs.
Fixed #20537.
Backport of 3ce1d30.
Conflicts:
	docs/howto/deployment/wsgi/index.txt
			
			
This commit is contained in:
		
				
					committed by
					
						 Aymeric Augustin
						Aymeric Augustin
					
				
			
			
				
	
			
			
			
						parent
						
							b75f1f3d27
						
					
				
				
					commit
					60353458ae
				
			| @@ -71,3 +71,11 @@ application that later delegates to the Django WSGI application, if you want to | |||||||
| combine a Django application with a WSGI application of another framework. | combine a Django application with a WSGI application of another framework. | ||||||
|  |  | ||||||
| .. _`WSGI middleware`: http://www.python.org/dev/peps/pep-3333/#middleware-components-that-play-both-sides | .. _`WSGI middleware`: http://www.python.org/dev/peps/pep-3333/#middleware-components-that-play-both-sides | ||||||
|  |  | ||||||
|  | .. note:: | ||||||
|  |  | ||||||
|  |     Some third-party WSGI middleware do not call ``close`` on the response | ||||||
|  |     object after handling a request — most notably Sentry's error reporting | ||||||
|  |     middleware up to version 2.0.7. In those cases the | ||||||
|  |     :data:`~django.core.signals.request_finished` signal isn't sent. This can | ||||||
|  |     result in idle connections to database and memcache servers. | ||||||
|   | |||||||
| @@ -34,6 +34,15 @@ command. For example: | |||||||
|  |  | ||||||
| .. _installation procedures: http://projects.unbit.it/uwsgi/wiki/Install | .. _installation procedures: http://projects.unbit.it/uwsgi/wiki/Install | ||||||
|  |  | ||||||
|  | .. warning:: | ||||||
|  |  | ||||||
|  |     Some distributions, including Debian and Ubuntu, ship an outdated version | ||||||
|  |     of uWSGI that does not conform to the WSGI specification. Versions prior to | ||||||
|  |     1.2.6 do not call ``close`` on the response object after handling a | ||||||
|  |     request. In those cases the :data:`~django.core.signals.request_finished` | ||||||
|  |     signal isn't sent. This can result in idle connections to database and | ||||||
|  |     memcache servers. | ||||||
|  |  | ||||||
| uWSGI model | uWSGI model | ||||||
| ----------- | ----------- | ||||||
|  |  | ||||||
|   | |||||||
| @@ -447,17 +447,20 @@ request_finished | |||||||
|  |  | ||||||
| Sent when Django finishes processing an HTTP request. | Sent when Django finishes processing an HTTP request. | ||||||
|  |  | ||||||
| .. note:: |  | ||||||
|  |  | ||||||
|     When a view returns a :ref:`streaming response <httpresponse-streaming>`, |  | ||||||
|     this signal is sent only after the entire response is consumed by the |  | ||||||
|     client (strictly speaking, by the WSGI gateway). |  | ||||||
|  |  | ||||||
| .. versionchanged:: 1.5 | .. versionchanged:: 1.5 | ||||||
|  |  | ||||||
|     Before Django 1.5, this signal was fired before sending the content to the |     Before Django 1.5, this signal was sent before delivering content to the | ||||||
|     client. In order to accomodate streaming responses, it is now fired after |     client. In order to accommodate :ref:`streaming responses | ||||||
|     sending the content. |     <httpresponse-streaming>`, it is now sent after the response has been fully | ||||||
|  |     delivered to the client. | ||||||
|  |  | ||||||
|  | .. note:: | ||||||
|  |  | ||||||
|  |     Some WSGI servers and middleware do not always call ``close`` on the | ||||||
|  |     response object after handling a request, most notably uWSGI prior to 1.2.6 | ||||||
|  |     and Sentry's error reporting middleware up to 2.0.7. In those cases this | ||||||
|  |     signal isn't sent at all. This can result in idle connections to database | ||||||
|  |     and memcache servers. | ||||||
|  |  | ||||||
| Arguments sent with this signal: | Arguments sent with this signal: | ||||||
|  |  | ||||||
|   | |||||||
| @@ -442,7 +442,15 @@ generation. | |||||||
| This signal is now sent after the content is fully consumed by the WSGI | This signal is now sent after the content is fully consumed by the WSGI | ||||||
| gateway. This might be backwards incompatible if you rely on the signal being | gateway. This might be backwards incompatible if you rely on the signal being | ||||||
| fired before sending the response content to the client. If you do, you should | fired before sending the response content to the client. If you do, you should | ||||||
| consider using a middleware instead. | consider using :doc:`middleware </topics/http/middleware>` instead. | ||||||
|  |  | ||||||
|  | .. note:: | ||||||
|  |  | ||||||
|  |     Some WSGI servers and middleware do not always call ``close`` on the | ||||||
|  |     response object after handling a request, most notably uWSGI prior to 1.2.6 | ||||||
|  |     and Sentry's error reporting middleware up to 2.0.7. In those cases the | ||||||
|  |     ``request_finished`` signal isn't sent at all. This can result in idle | ||||||
|  |     connections to database and memcache servers. | ||||||
|  |  | ||||||
| OPTIONS, PUT and DELETE requests in the test client | OPTIONS, PUT and DELETE requests in the test client | ||||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user