{ "info": { "author": "Luper Rouch", "author_email": "luper.rouch@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: BSD License", "Topic :: Internet :: WWW/HTTP :: WSGI :: Server" ], "description": "Rainbow Saddle\n==============\n\n.. image:: https://travis-ci.org/flupke/rainbow-saddle.svg\n :target: https://travis-ci.org/flupke/rainbow-saddle\n\nrainbow-saddle is a wrapper around `Gunicorn `_ to\nsimplify code reloading without dropping requests.\n\nInstallation\n------------\n\nInstall from pypi::\n\n $ sudo pip install rainbow-saddle\n\nOr from source::\n\n $ sudo ./setup.py install\n\nWhy?\n----\n\nSometimes doing a ``kill -HUP `` is not sufficient to reload your\ncode. For example it doesn't work well `if you host your code behind a symlink\n`_, or if a `.pth in your\ninstallation is updated to point to a different directory\n`_.\n\nThe correct way to reload code in such situations is a bit complicated::\n\n # Reexec a new master with new workers\n /bin/kill -s USR2 `cat \"$PID\"`\n # Graceful stop old workers\n /bin/kill -s WINCH `cat \"$PIDOLD\"`\n # Graceful stop old master \n /bin/kill -s QUIT `cat \"$PIDOLD\"`\n\nIt also has the downside of changing the \"master\" process PID, which confuses\ntools such as supervisord.\n\nrainbow-saddle handles all of this for you, and never changes its PID.\nReloading code becomes as simple as sending a ``SIGHUP`` again::\n\n $ rainbow-saddle --pid /tmp/mysite.pid gunicorn_paster development.ini --log-level debug \n $ kill -HUP `cat /tmp/mysite.pid`\n\n\nNews\n====\n\n0.4.0\n-----\n\nSupport new binary upgrade method used by Gunicorn, since version 19.6.0. Drops\nsupport for all previous versions of Gunicorn. See commit\nbenoitc/gunicorn@418f140 for more info, thanks to Jacob Magnusson.\n\n0.3.1\n-----\n\nMinor Python3 compatibility fix, thanks to Justin Locsei.\n\n0.3.0\n-----\n\nThanks to Rafael Floriano da Silva for the following:\n\n* add --gunicorn-pidfile\n* fix race condition for slow starting apps\n* update psutil", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/flupke/rainbow-saddle", "keywords": "gunicorn wrapper graceful restart", "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "rainbow-saddle", "package_url": "https://pypi.org/project/rainbow-saddle/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/rainbow-saddle/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/flupke/rainbow-saddle" }, "release_url": "https://pypi.org/project/rainbow-saddle/0.4.0/", "requires_dist": null, "requires_python": null, "summary": "A wrapper around gunicorn to handle graceful restarts correctly", "version": "0.4.0" }, "last_serial": 2381801, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "21c24f7a76dab9240154725131b3e055", "sha256": "9bbcd8845d442bed85fdb0871436cc76586e5f52c3b61ff118a0c36a8ab4f0d4" }, "downloads": -1, "filename": "rainbow-saddle-0.1.tar.gz", "has_sig": false, "md5_digest": "21c24f7a76dab9240154725131b3e055", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3618, "upload_time": "2013-03-08T18:13:19", "url": "https://files.pythonhosted.org/packages/5d/dc/3737be4e1ec7b0f4b1d69835d415bb3bc36531fc0ceb3cf25eb4715e5a72/rainbow-saddle-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "6c9351f6ca0dacd08cb09941dd736503", "sha256": "c6da357e40a75ffd7e99aacd5b4cf27eb2639de7ccf34538a9a560f1fccb1f27" }, "downloads": -1, "filename": "rainbow-saddle-0.1.1.tar.gz", "has_sig": false, "md5_digest": "6c9351f6ca0dacd08cb09941dd736503", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3638, "upload_time": "2014-12-11T11:13:52", "url": "https://files.pythonhosted.org/packages/55/5d/41119742cc67a722db7309a109d95cfbf284b1af52493d43c6b4cc527031/rainbow-saddle-0.1.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "3c24d883ab8bdd26fe4bc8840d3ffeb5", "sha256": "2c85213ec107b57a7139d045a878ad17c7bb76e68ba460410680378400c3f8bc" }, "downloads": -1, "filename": "rainbow-saddle-0.2.tar.gz", "has_sig": false, "md5_digest": "3c24d883ab8bdd26fe4bc8840d3ffeb5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3699, "upload_time": "2014-06-25T16:04:26", "url": "https://files.pythonhosted.org/packages/e6/51/d91973cabdc9c5e5f344d5d2c0d93a5f1cb173b01969922277aeab4ff79c/rainbow-saddle-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "f4eebf4eccada0ea22ecba49ae52fa94", "sha256": "b22352712a26c2b00df090ab449ef4447a0ac4f8da161537272b7762a7afb632" }, "downloads": -1, "filename": "rainbow-saddle-0.2.1.tar.gz", "has_sig": false, "md5_digest": "f4eebf4eccada0ea22ecba49ae52fa94", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3703, "upload_time": "2015-11-28T19:24:06", "url": "https://files.pythonhosted.org/packages/3e/62/0b688dc6443b2406bd85e579db0596bfc5cb06f1a96daa62c84974fc5993/rainbow-saddle-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "b7f3ab8f8a77ea96712cebee7a2a7c91", "sha256": "956dd2dd6e25304adad6118605bda6dc5745ea150e5b3b38b8cc4133289bf0a8" }, "downloads": -1, "filename": "rainbow-saddle-0.3.0.tar.gz", "has_sig": false, "md5_digest": "b7f3ab8f8a77ea96712cebee7a2a7c91", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5031, "upload_time": "2015-12-29T10:24:28", "url": "https://files.pythonhosted.org/packages/ec/0a/5d6af943d07be9bc0ca987db09a74a26445aedc4fa89c6bf8e521e47bf6d/rainbow-saddle-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "dd5034fb269ac0146a40a596efeed182", "sha256": "132bf6c98c18675f36a4456f247e3b29a8e7fcf7bb308bb08b0ccc76386003d0" }, "downloads": -1, "filename": "rainbow-saddle-0.3.1.tar.gz", "has_sig": false, "md5_digest": "dd5034fb269ac0146a40a596efeed182", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5048, "upload_time": "2016-04-08T15:25:22", "url": "https://files.pythonhosted.org/packages/9b/99/dc6612faafe1ad5a5f564b6a3218eb841d429ef0c4fb5e1eed7aa5873581/rainbow-saddle-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "c3de0f4c343bdef050ca7d0efc0730e3", "sha256": "86b546840dd073dff1d6e523c2b1957300be3523f2ce324d8ff794cbd85b555e" }, "downloads": -1, "filename": "rainbow-saddle-0.3.2.tar.gz", "has_sig": false, "md5_digest": "c3de0f4c343bdef050ca7d0efc0730e3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5107, "upload_time": "2016-05-26T13:45:59", "url": "https://files.pythonhosted.org/packages/47/e1/b78a8f5917c00976778f51982c4ff87e89b33e96ffee7a207bc946d685c2/rainbow-saddle-0.3.2.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "1368ec53b7421f7a42096d063598442b", "sha256": "97a481c16151c5bf9d08530117c5b2a345f0935f669862d268f5ffabfe060566" }, "downloads": -1, "filename": "rainbow-saddle-0.4.0.tar.gz", "has_sig": false, "md5_digest": "1368ec53b7421f7a42096d063598442b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5172, "upload_time": "2016-10-05T11:51:20", "url": "https://files.pythonhosted.org/packages/59/a0/25744c1b1fe7631b43bd69a9bbf4f195ba08bb3cedb3ab41cbd3ad1a0b17/rainbow-saddle-0.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1368ec53b7421f7a42096d063598442b", "sha256": "97a481c16151c5bf9d08530117c5b2a345f0935f669862d268f5ffabfe060566" }, "downloads": -1, "filename": "rainbow-saddle-0.4.0.tar.gz", "has_sig": false, "md5_digest": "1368ec53b7421f7a42096d063598442b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5172, "upload_time": "2016-10-05T11:51:20", "url": "https://files.pythonhosted.org/packages/59/a0/25744c1b1fe7631b43bd69a9bbf4f195ba08bb3cedb3ab41cbd3ad1a0b17/rainbow-saddle-0.4.0.tar.gz" } ] }