जब मेरी यूनिट परीक्षणों में से एक SQLAlchemy ऑब्जेक्ट को हटा देता है, तो ऑब्जेक्ट एक बाद_डिलीट ईवेंट ट्रिगर करता है जो ड्राइव से फ़ाइल को हटाने के लिए एक सेलेरी कार्य को ट्रिगर करता है।कनेक्शन बंद हो जाता है जब एक एसक्यूएलकेमी घटना सेलेरी कार्य
कार्य करते समय कार्य CELERY_ALWAYS_EAGER = True
है।
gist to reproduce the issue easily
उदाहरण दो परीक्षणों है। एक घटना में कार्य को ट्रिगर करता है, दूसरा घटना के बाहर। घटना में केवल एक ही कनेक्शन बंद कर देता है।
git clone https://gist.github.com/5762792fc1d628843697.git
cd 5762792fc1d628843697
virtualenv venv
. venv/bin/activate
pip install -r requirements.txt
python test.py
ढेर:
जल्दी त्रुटि आप चला सकते हैं पुन: पेश करने के लिए
$ python test.py
E
======================================================================
ERROR: test_delete_task (__main__.CeleryTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test.py", line 73, in test_delete_task
db.session.commit()
File "/home/brice/Code/5762792fc1d628843697/venv/local/lib/python2.7/site-packages/sqlalchemy/orm/scoping.py", line 150, in do
return getattr(self.registry(), name)(*args, **kwargs)
File "/home/brice/Code/5762792fc1d628843697/venv/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 776, in commit
self.transaction.commit()
File "/home/brice/Code/5762792fc1d628843697/venv/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 377, in commit
self._prepare_impl()
File "/home/brice/Code/5762792fc1d628843697/venv/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 357, in _prepare_impl
self.session.flush()
File "/home/brice/Code/5762792fc1d628843697/venv/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1919, in flush
self._flush(objects)
File "/home/brice/Code/5762792fc1d628843697/venv/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 2037, in _flush
transaction.rollback(_capture_exception=True)
File "/home/brice/Code/5762792fc1d628843697/venv/local/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 63, in __exit__
compat.reraise(type_, value, traceback)
File "/home/brice/Code/5762792fc1d628843697/venv/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 2037, in _flush
transaction.rollback(_capture_exception=True)
File "/home/brice/Code/5762792fc1d628843697/venv/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 393, in rollback
self._assert_active(prepared_ok=True, rollback_ok=True)
File "/home/brice/Code/5762792fc1d628843697/venv/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 223, in _assert_active
raise sa_exc.ResourceClosedError(closed_msg)
ResourceClosedError: This transaction is closed
----------------------------------------------------------------------
Ran 1 test in 0.014s
FAILED (errors=1)
कृपया त्रुटि और स्टैक ट्रेस पोस्ट करें। – ACV
मैंने अभी परीक्षण आउटपुट के साथ अपडेट किया है। मैंने स्थानीय * निक्स मशीन पर आसानी से पुन: उत्पन्न करने के लिए आदेश भी जोड़े। – deBrice