celery -A app.queue.celery_app worker –loglevel=info
Usage: celery [OPTIONS] COMMAND [ARGS]…
Try ‘celery –help’ for help.
Error: Invalid value for ‘-A’ / ‘–app’:
Unable to load celery application.
While trying to load the module app.queue.celery_app the following error occurred:
Traceback (most recent call last):
File “D:\anaconda3\Lib\site-packages\celery\bin\celery.py”, line 58, in convert
return find_app(value)
^^^^^^^^^^^^^^^
File “D:\anaconda3\Lib\site-packages\celery\app\utils.py”, line 386, in find_app
sym = imp(app)
^^^^^^^^
File “D:\anaconda3\Lib\site-packages\celery\utils\imports.py”, line 109, in import_from_cwd
return imp(module, package=package)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “D:\anaconda3\Lib\importlib\__init__.py”, line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “<frozen importlib._bootstrap>”, line 1204, in _gcd_import
File “<frozen importlib._bootstrap>”, line 1176, in _find_and_load
File “<frozen importlib._bootstrap>”, line 1147, in _find_and_load_unlocked
File “<frozen importlib._bootstrap>”, line 690, in _load_unlocked
File “<frozen importlib._bootstrap_external>”, line 940, in exec_module
File “<frozen importlib._bootstrap>”, line 241, in _call_with_frames_removed
File “E:\wwwroot\1-python\lan_fastapi\app\queue\celery_app.py”, line 2, in <module>
from app.config import settings
File “E:\wwwroot\1-python\lan_fastapi\app\config.py”, line 16, in <module>
settings = Settings()
^^^^^^^^^^
File “D:\anaconda3\Lib\site-packages\pydantic_settings\main.py”, line 167, in __init__
super().__init__(
File “D:\anaconda3\Lib\site-packages\pydantic\main.py”, line 212, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pydantic_core._pydantic_core.ValidationError: 4 validation errors for Settings
OPENAI_API_KEY
Input should be a valid string [type=string_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.9/v/string_type
REDIS_URL
Input should be a valid string [type=string_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.9/v/string_type
DATABASE_URL
Input should be a valid string [type=string_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.9/v/string_type
CELERY_BROKER_URL
Input should be a valid string [type=string_type, input_value=None, input_type=NoneType]
For further information visit https://errors.pydantic.dev/2.9/v/string_type
你遇到的错误是:
pydantic_core._pydantic_core.ValidationError: 4 validation errors for Settings
OPENAI_API_KEY
REDIS_URL
DATABASE_URL
CELERY_BROKER_URL
这说明你在运行 celery -A app.queue.celery_app worker
时,Celery 在导入你的配置模块 app.config.Settings
时校验失败了,因为它依赖于几个环境变量没有设置:
原因详解
你用的是 Pydantic Settings(配置类) 来加载项目配置,而它期望从环境变量中获取如下配置:
-
OPENAI_API_KEY
-
REDIS_URL
-
DATABASE_URL
-
CELERY_BROKER_URL
但这些环境变量没有设置,导致 Celery 无法初始化配置类 Settings()
,从而整个模块 app.queue.celery_app
加载失败,最终报错。
解决方案
在项目根目录创建 .env
文件,内容如下:
OPENAI_API_KEY=your_openai_key
REDIS_URL=redis://localhost:6379/0
DATABASE_URL=sqlite:///./test.db
CELERY_BROKER_URL=redis://localhost:6379/0
然后在你的 config.py
里写:
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
OPENAI_API_KEY: str
REDIS_URL: str
DATABASE_URL: str
CELERY_BROKER_URL: str
model_config = SettingsConfigDict(env_file=”.env”, env_file_encoding=’utf-8′)
settings = Settings()