我在Railway中部署了一个Django项目,它使用Celery和Redis来执行预定任务。项目已成功联机,但未执行Celery任务。
如果我使用Railway CLI从我的计算机终端执行Celery worker,任务将按预期执行,结果将保存在Railway的PostgreSQL中,因此这些结果将显示在在线站点中。此外,使用的redis服务器也是铁路的服务器。
然而,Celery在“本地”运营。这是我本地终端上的日志,显示Celery正在本地运行,Redis服务器是Railway中的一个:
-------------- celery@MacBook-Pro-de-Corey.local v5.2.7 (dawn-chorus)
--- ***** -----
-- ******* ---- macOS-13.1-arm64-arm-64bit 2023-01-11 23:08:34
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app: suii:0x1027e86a0
- ** ---------- .> transport: redis://default:**@containers-us-west-28.railway.app:7078//
- ** ---------- .> results:
- *** --- * --- .> concurrency: 10 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
[tasks]
. kansoku.tasks.suii_kakunin
我在Proc文件中包含了这行代码,这是关于工人的(正如我在另一个相关的答案中看到的):
worker: python manage.py qcluster --settings=my_app_name.settings
并且还具有指向Railway的REDIS_URL
的环境变量CELERY_BROKER_REDIS_URL
。我也尝试过在应用程序的管理员中创建一个“周期性任务”,但它就是不能执行。我应该做什么才能在没有电脑的情况下自动完成计划的任务?
1条答案
按热度按时间dtcbnfnu1#
我的理解是,为了在Railway上运行celery worker,您需要在项目中创建另一个服务,并启动您通常放置在Procfile中的命令来启动worker(在服务设置中,转到Deploy >> Start命令)。这种设置意味着您不需要Procfile(因此,您需要重新排列其他命令(例如:“web”)到其他服务设置中)。