简介
使用Django Rest框架,芹菜和Redis我创建了一个personalized quiz to help people find roles in tech they would like。该应用程序询问并创建一个带有您的结果的自定义图像,需要时间在后台处理,因此我利用芹菜和Redis来完成这项工作!
现在,该应用程序花了我一天的时间来建造,但是一个星期来部署生产。为什么?很难找到的古老故事,或者不存在文档。为了打破技术破裂的周期,我创建了本教程以涵盖以下步骤:
- 如何在铁路上部署Redis
- 如何将Django服务器连接到铁路上的Redis服务器
- 如何在建造过程中运行芹菜工人
此博客将不是封面:
- Python的基础
- Django Rest Framework入门
- 开始使用芹菜
- 重新开始
先决条件
- 所需的技能:Django,Redis,芹菜的基本知识
- 需要的工具:设置用于使用Redis&Celery的Django项目
,如果您不愿意与教程一起构建,您可以一起阅读!
第2节:项目概述
- 以下是项目结构的简化概述,因此您可以更好地了解该项目的结构
- 出于此博客的目的,我将重点关注的文件集体化为确保
tbc/
├── manage.py
├── ➕ Procfile
├── tbc/
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── ➕ celery.py
│ └── wsgi.py
└── quiz/
├── migrations/
│ └── __init__.py
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── serializers.py
├── ➕ tasks.py
├── tests.py
├── urls.py
└── views.py
celery.py
import os
from celery import Celery
# Set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tbc.settings')
app = Celery('tasks',
backend=os.getenv('REDIS_URL'),
broker=os.getenv('REDIS_URL')
)
# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
# should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')
# Load task modules from all registered Django apps.
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print(f'Request: {self.request!r}')
建立铁路
在铁路中创建Redis服务器
现在,这些文件都可以解决不同的环境,让我们进入铁路中的项目以添加新的Redis实例。
1. To get started head over to your Railway dashboard and select the project you would like to add your Redis setup to. Once in the project click the '+ New' get the service dropdown.
![Screenshot of railway dashboard where you click the '+ New' button to create a new services](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s0nc9scypk92bln6mx8n.png)
2. From the dropdown, you want to select Redis by either typing in Redis to have it pop up, or selecting database to find the Redis option.
添加铁路参考变量
在我们的代码中,我们使用REDIS_URL
环境变量在我们的[celery.py](http://celeary.py)
文件中,因此我们的项目可以在我们工作的每个环境中使用不同的redis URL。
对于生产环境,我们希望我们的REDIS_URL
连接到以前创建的Redis服务器。为此,我们利用Redis_url的铁路参考变量。
>ℹ️ The way I think of Railway Reference variables is a quick way to add variables for Railway-based services without having to type or copy and paste the value because the Railway defines the value for you! Want to learn more about this topic? Check out their [documentation on variables](https://docs.railway.app/develop/variables) here.
铁路跑步和监视芹菜任务
-
要经营芹菜工人,您需要更新您的
Procfile
才能像这样:
web: celery -A tbc worker --loglevel=info & python manage.py migrate && gunicorn tbc.wsgi --bind 0.0.0.0:$POR
这是什么?
这使铁路可以在系统部署站点时运行芹菜工人。没有此任务,运行您的Django应用程序将无法与芹菜工人建立联系。â·可能会在想 - 嘿,当我在本地运行它时,我必须启动redis服务器。我不必做同样的生产吗?答案是否定的,因为铁路适合您。
我们为什么要更新Procfile
文件?
当我们在本地文件中工作时,我们会在运行芹菜工人之前启动Django和redis服务器,并确保运行所有迁移。
什么是Procfile
文件?
Procfile
是我们告诉服务器如何运行这些命令以及在铁路启动服务器之后的更多内容。
我们添加的命令是什么意思?
通过在其他命令之前添加 celery -A tbc worker --loglevel=info &
,您可以告诉铁路运行芹菜,以便您的任务可以运行。这里要召集的一件事是任务的顺序很重要。首先添加芹菜详细信息,以避免在应用程序建筑物期间芹菜运行时可能遇到的可能构建错误。
ââistion如果您熟悉procfile文件,则可能会习惯于在下面的工作中看到该文件设置,其中包括工作人员下的芹菜详细信息。我们将工人详细信息放在网站上的原因是因为铁路仅在网络下读取命令。
```python
web: python manage.py migrate && gunicorn tbc.wsgi
worker: celery -A tbc worker --loglevel=info
```
准备测试
在此阶段,一切都已连接并准备好进行生产测试!如果您已在任何任务中添加了任何日志记录,您会在铁路中的Django服务器中看到此信息。
如果您击中了所有工作流,并且一切都按预期工作,则恭喜您这样做了!
结论
在此博客中,我们设置了我们的产品铁路环境,以与Django,Redis和芹菜合作!
- 我们能够覆盖
- 如何设置我们的项目以支持生产环境
- 涵盖在铁路中创建REDIS服务器所需的步骤
- 如何将生产中的Django服务器连接到Redis服务器
更多资源
如果您走了这么远,我只想说感谢您的关注!很想听听您在此博客文章上的反馈和想法。