我有一个简单的周期性任务:
from celery.decorators import periodic_task
from celery.task.schedules import crontab
from .models import Subscription
@periodic_task(run_every=crontab(minute=0, hour=0))
def deactivate_subscriptions():
for subscription in Subscription.objects.filter(is_expired=True):
print(subscription)
subscription.is_active = False
subscription.can_activate = False
subscription.save()
Run Code Online (Sandbox Code Playgroud)
我想用测试来覆盖它。
我找到了有关如何测试简单任务的信息,例如@shared_task,但我找不到测试的示例@periodic_task
到目前为止,我已经使用Gunicorn和这个配置文件 systemd:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
EnvironmentFile=/var/www/user/.envvars
User=user
Group=www-data
WorkingDirectory=/var/www/user
ExecStart=/var/www/venv/bin/gunicorn --workers 3 --bind unix:/var/www/user/user.sock config.wsgi:application --env DJANGO_SETTINGS_MODULE='config.settings.production'
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
和Nginx代理请求这个 unix 套接字。
尝试达芙妮,我意识到我无法指定--env DJANGO_SETTINGS_MODULE='config.settings.production'
但是我在 中指定了这个变量asgi.py,在这一切都是正常的。
一旦我运行了gunicorn service,套接字本身就会立即创建,来自nginx.
当我尝试对 Daphne 执行相同的操作时,出现错误:
6 月 26 日 11:48:32 p435061.kvmvps daphne[8447]:ValueError:int() 的文字无效,基数为 8:'/var/www/user/user.sock'
但是unix.sock当我尝试运行Daphne和创建我的systemd文件时,我不知道如何使用
更新
我更改了设置文件,它给出了一些奇怪的东西,但它有效:
[Unit]
Description=daphne daemon
After=network.target
[Service]
EnvironmentFile=/var/www/gglobal/.envvars
User=gglobal
Group=www-data
WorkingDirectory=/var/www/gglobal
ExecStart=/var/www/venv/bin/daphne -b unix:/var/www/gglobal/gglobal.sock config.asgi:channel_layer -v2
[Install]
WantedBy=multi-user.target …Run Code Online (Sandbox Code Playgroud) 我想从以下点x获取坐标:yqueryset
user = User.objects.values('id', 'email', 'username', 'point').first()
Run Code Online (Sandbox Code Playgroud)
这些是我的models:
from django.db.models import Model
from django.contrib.gis.db.models import PointField
class BasePointModel(Model):
point = PointField(null=True, spatial_index=True, geography=True)
class Meta:
abstract = True
class User(AbstractUser, BasePointModel, HashableModel): # type: ignore
# First Name and Last Name do not cover name patterns
# around the globe.
name = CharField(_("Name of User"), blank=True, max_length=255)
is_online = BooleanField(_("Is online"), default=False)
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:
{'id': 85270,
'email': 'username_0@email.com',
'username': 'username_0',
'point': <Point object at 0x7f8e061cc2b8>} …Run Code Online (Sandbox Code Playgroud) 我试图使用gis在docker:
这是DockerfileDjango 的:
FROM python:3.6-alpine
ENV PYTHONUNBUFFERED 1
RUN apk update \
# psycopg2 dependencies
&& apk add --virtual build-deps gcc python3-dev musl-dev \
&& apk add postgresql-dev \
# Pillow dependencies
&& apk add jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev \
# CFFI dependencies
&& apk add libffi-dev py-cffi \
# Translations dependencies
&& apk add gettext \
# https://docs.djangoproject.com/en/dev/ref/django-admin/#dbshell
&& apk add postgresql-client
# ADD PostGIS here
# POSTGIS dependencies …Run Code Online (Sandbox Code Playgroud) 我有docker-compose文件,我想将其发送到 Heroku,然后执行docker-compose up -d --build.
我找到了一百多个如何做类似事情的例子heroku container:push web,但这不是我需要的。
现在我只有 5 个服务docker-compose,但是当它们达到 30 个时我该怎么办?
我有一个数字和小数位数.
i = 1138602
d = 2
Run Code Online (Sandbox Code Playgroud)
我想收到的结果应该是这样的:
11386.02
Run Code Online (Sandbox Code Playgroud)
我想到的最愚蠢的方式:
i = 1138602
d = 2
b = str(i)
i = Decimal(b.replace(b[-d], '.{}'.format(b[-d])))
Decimal('11386.02')
Run Code Online (Sandbox Code Playgroud)
哪种方式会更正确?