pee*_*ith 3 python redis flask rq
我创建了一个 Flask 应用程序,它实际上是一个新闻搜索应用程序。它目前提供多种路由,与 Elasticsearch 集成以进行文档搜索和索引,并通过 Flask-SQLAlchemy 与 mySQL DB 集成。
\n该应用程序应该允许登录的用户搜索文档/文章,此时会触发 elasticsearch 并将结果返回给用户。这一切都有效。
\n我现在正在构建使用 RQ 和 Ajax 启动后台异步搜索的功能。现在我需要我的 RQ 来排队一个任务,该任务将搜索(调用一些 API)、更新我的数据库并更新我的 ES 索引。所有这些功能都已在我的 Flask 应用程序中构建(搜索 API 调用、配置、DB ORM、ES 接口),因此我希望理想地重用所有这些功能。
\n我设置了一个 RQ,它调用一个模块,然后尝试创建一个新的应用程序实例,以便我可以重用现有的 DB/ES 设置,但是当调用代码时,我从 RQ 中收到错误:
\nFile "./news_functions.py", line 14, in <module>\n from app import create_app, db\nModuleNotFoundError: No module named 'app'\nRun Code Online (Sandbox Code Playgroud)\n应用结构如下:
\nproject\n\xe2\x94\x82 project.py \n\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80app\n\xe2\x94\x82 \xe2\x94\x82 __init.py__\n\xe2\x94\x82 \xe2\x94\x82 config.py\n\xe2\x94\x82 \xe2\x94\x82 models.py\n\xe2\x94\x82 \xe2\x94\x82 classes.py\n\xe2\x94\x82 \xe2\x94\x82 news_functions.py\n\xe2\x94\x82 \xe2\x94\x82 .env\n\xe2\x94\x82 \xe2\x94\x82\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80main\n\xe2\x94\x82 \xe2\x94\x82 __init__.py\n\xe2\x94\x82 \xe2\x94\x82 forms.py\n\xe2\x94\x82 \xe2\x94\x82 views.py\n\xe2\x94\x82 \xe2\x94\x82 ...\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80static\n\xe2\x94\x82 \xe2\x94\x82 css, etc.\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80templates\n\xe2\x94\x82 \xe2\x94\x82 templates\n\xe2\x94\x82 \n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80migrations\n \xe2\x94\x82 ... DB migrations here...\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80logs\n \xe2\x94\x82 ... logs stored here\nRun Code Online (Sandbox Code Playgroud)\n在我的views.py 文件中,我尝试使用以下行对任务进行排队:
\n job = current_app.task_queue.enqueue('news_functions.execute_search', jobKwargs)\nRun Code Online (Sandbox Code Playgroud)\n这不会导致烧瓶方面出现任何问题,但会在 RQ 工作人员身上引发上述错误
\nFile "./news_functions.py", line 14, in <module>\n from app import create_app, db\nModuleNotFoundError: No module named 'app'\nRun Code Online (Sandbox Code Playgroud)\n在 news_functions.py 文件中,我尝试创建应用程序的实例,以便可以通过以下导入和设置重用我的模型等,这似乎会引发错误:
\nfrom app import create_app, db\n\napp = create_app()\napp.app_context().push()\nRun Code Online (Sandbox Code Playgroud)\n我认为问题是我试图从应用程序文件夹本身导入 create_app 但我不知道我的其他选项是什么。如果我向上移动文件夹,则 RQ 作业无法将该任务排队,因为它超出了应用程序的范围。
\n我不确定我是否以正确的方式处理这个问题,但我实际上希望能够重用应用程序配置、flask-sqlalchemy、es 设置来在后台执行此附加任务。
\n希望有意义并且有人可以提供帮助!
\n在完全拉出我的头发之后,我意识到我是从应用程序目录本身而不是主目录中启动 RQ 工作程序,这意味着它实际上是在“app”文件夹中寻找名为“app”的模块,即 app. app.news_functions 显然不存在。
经过两天的努力,我得到了明确的教训:为什么我无法导入我知道存在的模块!
孩子们,一定要检查你的工作目录!
| 归档时间: |
|
| 查看次数: |
1549 次 |
| 最近记录: |