小编Nar*_*nik的帖子

如何在 Django 中测试 celery period_task?

我有一个简单的周期性任务:

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

python django cron celery periodic-task

8
推荐指数
1
解决办法
3280
查看次数

如何在 unix 套接字上绑定达芙妮?

到目前为止,我已经使用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)

unix django nginx django-channels daphne

6
推荐指数
1
解决办法
3018
查看次数

Django获取PointField的坐标值

我想从以下点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)

python gis django postgis geodjango

6
推荐指数
1
解决办法
1838
查看次数

django.core.exceptions.ImproperlyConfigured:找不到 GDAL 库

我试图使用gisdocker

这是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)

python gis django postgis docker

5
推荐指数
1
解决办法
3303
查看次数

如何在部署时运行 docker-compose up

我有docker-compose文件,我想将其发送到 Heroku,然后执行docker-compose up -d --build.

我找到了一百多个如何做类似事情的例子heroku container:push web,但这不是我需要的。

现在我只有 5 个服务docker-compose,但是当它们达到 30 个时我该怎么办?

heroku docker docker-compose

1
推荐指数
1
解决办法
4337
查看次数

如何用点分隔整数?

我有一个数字和小数位数.

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)

哪种方式会更正确?

python integer decimal python-3.x

-1
推荐指数
1
解决办法
70
查看次数