ทำงานข้างนอกของโปรแกรมคอนเท็กซ์ขวดขึ้นฉ่าย

0

คำถาม

ฉันจะ preface กับว่าฉันรู้ว่ามันมีไม่กี่ทางแก้ปัญหานั่นสำหรับเรื่องนี้ลอยอยู่ถึงแม้ไม่ใช่เรื่องของพวกเขาตามนี้ทาง มาที่นี่ และไม่เหมือนจะตอบคำถามของฉันเลย

ฉันได้รับข้อผิดพลาดนี้มาจากของฉันขึ้นฉ่ายแอ๊ปอยู่ในขวดเหล้า

[2021-11-23 22:50:01,469: ERROR/ForkPoolWorker-1] Task smartful_versioning_flask.test_celery_task[6dda4a4b-cf64-4fdc-8317-237dca9ad31b] raised unexpected: RuntimeError('Working outside of application context.\n\nThis typically means that you attempted to use functionality that needed\nto interface with the current application object in some way. To solve\nthis, set up an application context with app.app_context().  See the\ndocumentation for more information.')
Traceback (most recent call last):
  File "/var/smartful_flask/smartful_venv/lib/python3.7/site-packages/celery/app/trace.py", line 450, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/var/smartful_flask/smartful_venv/lib/python3.7/site-packages/celery/app/trace.py", line 731, in __protected_call__
    return self.run(*args, **kwargs)
  File "/var/smartful_flask/smartful_versioning_flask.py", line 21, in test_celery_task
    return jsonify({"something": "something"})
  File "/var/smartful_flask/smartful_venv/lib/python3.7/site-packages/flask/json/__init__.py", line 336, in jsonify
    if current_app.config["JSONIFY_PRETTYPRINT_REGULAR"] or current_app.debug:
  File "/var/smartful_flask/smartful_venv/lib/python3.7/site-packages/werkzeug/local.py", line 422, in __get__
    obj = instance._get_current_object()
  File "/var/smartful_flask/smartful_venv/lib/python3.7/site-packages/werkzeug/local.py", line 544, in _get_current_object
    return self.__local()  # type: ignore
  File "/var/smartful_flask/smartful_venv/lib/python3.7/site-packages/flask/globals.py", line 47, in _find_app
    raise RuntimeError(_app_ctx_err_msg)
**RuntimeError: Working outside of application context.**

This typically means that you attempted to use functionality that needed
to interface with the current application object in some way. To solve
this, set up an application context with app.app_context().  See the
documentation for more information.

หลังจาก troubleshooting ฉันอยู่ที่สมบูรณ์สูญเสีย ที่ไหนหนึ่งขอผ่านในคอนเท็กซ์โปรแกรที่ถูกอ้างอิงในร้ายเท่าข่าวฉาวโฉ่"ไหม?


     from flask import Flask, jsonify
     from celery import Celery
     
     app = Flask(__name__)
     app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0'
     app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0'
     
     celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
     celery.conf.update(app.config)
     
     @celery.task
     def test_celery_task():
         return jsonify({"something": "something"})
     
     @app.route("/web/start/backend", methods=['POST'])
     def start_task():
         task = test_celery_task.apply_async()
         return task.id
     
     @app.route("/web/check-status/backend/<task_id>", methods=['GET'])
     def check_task(task_id):
         task = test_celery_task.AsyncResult(task_id)
     
         if task.state == 'PENDING':
             return jsonify({
                 "task": task_id,
                 "state": task.state,
                 "data": None,
                 "complete": False,
                 "error": False
             })
         elif task.state == 'SUCCESS':
             print(task.info)
         else:
             print(task.state)
     
         return "task.info"

    if __name__ == "__main__":
        app.run()

มือนอย่างที่คาดไว้อยู่ที่นี่กับเรื่องนี้ traceback ที่งานจะล้มเหลวและไม่เคยกลับมาจากโปรแกรมเบื้องหลัง. ฉันใช้ Ngnix,wsgi,หัวหน้าของเพื่อรับใช้องนี้-แต่เหมือนกันปัญหาอยู่ก่อนโดยมีหรือไม่มีหัวหน้าของ spawning นที่งาน.

ฉันแน่ใจว่ามันคือบางอย่างโง่เง่าและน่าเบื่อนั้นฉัน overlooking แต่เป็นส่วนหนึ่งปกติ-บอดเกินกว่าจะเห็นมัน

celery flask python
2021-11-23 23:15:00
1

คำตอบที่ดีที่สุด

0

ฉันต้องเจอที่ซ่อมที่นี่และฉัน notating มันสำหรับคนอื่นกับคนที่คล้ายกันสถานการณ์. นี่ต้องมีส่วนเกี่ยวข้องกับคนทำงานไดเรกทอรีที่ซุปเปอร์ไวเซอร์คือการใช้.

ฉันเข้าไปในไดเรกทอรีของขวดของโปรแกรมเกี่ยวกัเกิดและสร้างเป็นโสดทำงานด้วยตนเอง:

# smartful_venv/bin/celery --app=smartful_versioning_flask.celery worker --loglevel=DEBUG

ฉันทิ้งขวดของแอ๊ปที่เห็นในคำถามของฉันคือรอยนิ้วมือเรียบร้อยแล้ว สถานการณ์ของฉันก็ดูเหมือนหัวหน้าไม่มีการใช้งานที่ทำงานไดเรกทอรีที่ฉันใช้ มันไม่ใช่ในข้อบังคับของกล่าแต่นี่มันแตกต่างไม่ได้คุยกันเรื่องในหัวหน้าของ docs จริงๆ,ถึงแม้ว่าหัวหน้าของรายงานมันเป็นการทำงานด้วยสิทธิ์ของ root-มันโกหก!

แก้ไขเพื่อเพิ่ม:

ในอีกงานฉันต้องการยาเพิ่ม with app.app_context(): ก่อนจะทำอะไรทั้งนั้น นั่นมันแปลกกับฉันแต่มันได้ผล ถ้าใครมีคำอธิบายว่าทำไมแอ๊ปคอนเท็กซ์อยู่ก่อนเดียวหลังจากที่กับมันอาจนำที่แข็งแรงมาถกเถียงกันนะ

2021-11-24 19:09:10

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่