小编Zag*_*ags的帖子

为Django Postgres连接强制SSL

我想强制Django使用SSL连接到我的postgres数据库.

这个问题表明我需要传递sslmode='require'给psycopg2 connect调用.如何将此添加到Django的数据库参数?

django postgresql

10
推荐指数
2
解决办法
4249
查看次数

Python多处理和子进程的独立性

从python终端,我运行如下命令,以产生一个长时间运行的子进程:

from multiprocessing.process import Process
Process(target=LONG_RUNNING_FUNCTION).start()
Run Code Online (Sandbox Code Playgroud)

这个命令返回,我可以在python终端中做其他事情,但是孩子打印的任何内容仍然会打印到我的python终端会话中.

当我退出终端(使用exitCTRL+ D)时,退出命令会挂起.如果我在此挂起期间按CTRL+ C,则终止子进程.

如果我手动终止python终端进程(通过posix kill命令),子进程将被孤立,并继续运行,其输出可能被丢弃.

如果我运行此代码python -c,它等待孩子终止,并且CTRL+ C杀死父和子.

当父母被终止时,哪些运行配置的python会杀死孩子?特别是,如果python-mod_wsgi-apache webserver产生子进程然后重新启动,那么这些孩子会被杀死吗?

[顺便说一下,分离终端产生的子进程的正确方法是什么?有没有比以下更优雅的方式:故意在python中创建一个孤儿进程 ]

更新:在apache重新启动时,multiprocessing.Process由apache下运行的Web服务器生成的python子进程不会被终止.

python children subprocess multiprocessing orphan

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

始终推迟 Django 中的字段

如何使 Django 模型上的字段延迟该模型的所有查询,而不需要对每个查询进行延迟?

研究

功能于 2014 年被请求作为一项功能,但在 2022 年被拒绝

除了 Django 原生的功能之外,显而易见的想法是创建一个如下所示的自定义管理器:

class DeferedFieldManager(models.Manager):

    def __init__(self, defered_fields=[]):
        super().__init__()
        self.defered_fields = defered_fields

    def get_queryset(self, *args, **kwargs):
        return super().get_queryset(*args, **kwargs
            ).defer(*self.defered_fields)

class B(models.Model):
    pass

class A(models.Model):
    big_field = models.TextField(null=True)
    b = models.ForeignKey(B, related_name="a_s")

    objects = DeferedFieldManager(["big_field"])

class C(models.Model):
    a = models.ForeignKey(A)

class D(models.Model):
    a = models.OneToOneField(A)

class E(models.Model):
    a_s = models.ManyToManyField(A)

Run Code Online (Sandbox Code Playgroud)

但是,虽然这适用于A.objects.first()(直接查找),但不适用于B.objects.first().a_s.all()(一对多)、C.objects.first().a(多对一)、D.objects.first().a(一对一)或E.objects.first().a_s.all()(多对多)。

我在这里发现特别令人困惑的是,这是我的对象的默认管理器,这意味着它也应该是反向查找(一对多和多对多)的默认管理器,但这不是在职的。根据Django 文档

默认情况下,用于反向关系的RelatedManager 是该模型的默认管理器的子类。

测试这一点的一个简单方法是删除应该从数据库延迟的字段,并且OperationalError: …

python django django-models django-managers

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

将 Elastic Beanstalk 环境从启动配置更改为启动模板

Elastic Beanstalk 文档说:

\n
\n

Web 服务器环境具有...以下两种资源之一。

\n
    \n
  • AWSEBAutoScalingLaunchConfiguration (AWS::AutoScaling::LaunchConfiguration) \xe2\x80\x93 附加到您环境的 Auto Scaling 组的启动配置。

    \n
  • \n
  • AWSEBEC2LaunchTemplate (AWS::EC2::LaunchTemplate) \xe2\x80\x93 您环境的 Auto Scaling 组使用的 Amazon EC2 启动模板。

    \n
  • \n
\n
\n

AWS 正在弃用启动配置,因为启动模板的功能更加严格。AWS 特别向客户发出通知称:

\n
\n

2022 年 12 月 31 日之后,将不再向启动配置添加新的 Amazon Elastic Compute Cloud (Amazon EC2) 实例类型。

\n
\n

如何将当前使用启动配置的 Elastic Beanstalk 环境转换为使用启动模板?

\n

amazon-web-services amazon-elastic-beanstalk launch-template

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

在 EC2 实例上安装 moreutils

如何在默认映像 Amazon EC2 实例上安装moreutils ?这些实例是基于 CentOS 构建的,但可能有自己的软件包存储库

sudo yum install moreutils
Run Code Online (Sandbox Code Playgroud)

失败了

No package moreutils available.
Run Code Online (Sandbox Code Playgroud)

我需要安装 moreutils 的 yum 存储库是什么?

centos yum amazon-ec2 moreutils

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

使用CSRF_COOKIE_HTTPONLY将Django CSRF令牌传递给Angular

在Django中,当CSRF_COOKIE_HTTPONLY设置设置为True时,CSRF cookie获得了httponly标志,这从安全角度来看是理想的,但是打破了将此cookie添加到httpProvider的标准角度解决方案,如下所示:

$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
Run Code Online (Sandbox Code Playgroud)

通过Django 1.9,有一个解决方法,你可以通过将它放在模板中直接将cookie传递给应用程序:

<script>
    window.csrf_token = "{{ csrf_token }}";
</script>
Run Code Online (Sandbox Code Playgroud)

把它放在角度应用程序中:

angularApp.config(["$httpProvider", function($httpProvider)e {
    $httpProvider.defaults.headers.common["X-CSRFToken"] = window.csrf_token;
}]
Run Code Online (Sandbox Code Playgroud)

不幸的是,这对于Django 1.10+中的单页角度应用程序不起作用,因为CSRF cookie在每次请求后都会更改.如何通过CSRF_COOKIE_HTTPONLY设置从Angular发送到Django 1.10+的帖子请求?
注意:禁用CSRF保护是不可接受的答案.

django cookies csrf django-csrf angularjs

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

Elastic Beanstalk 删除配置更改时生成的文件

在 Elastic Beanstalk 上,使用基于 AWS Linux 2 的环境时,更新环境的环境属性(即环境变量)会导致所有生成的文件被删除。作为此更新的一部分,它也不会运行container_commands。

例如,我有一个 Django 项目,其中包含collectstatic容器命令:

05_collectstatic:
  command: |
    source $PYTHONPATH/activate
    python manage.py collectstatic --noinput --ignore *.scss
Run Code Online (Sandbox Code Playgroud)

这会将静态文件收集到一个称为staticfiles部署一部分的文件夹中。但是当我更新环境变量时,staticfiles它被删除了。这会导致应用程序上的所有静态文件被破坏,直到我重新部署为止,这是极其不可取的。

在基于 AWS Linux 1 的环境中不会发生此行为。差异似乎在于,基于 AWS Linux 2 的环境/var/app/current在环境变量更改期间会替换该文件夹,而基于 AWS Linux 1 的环境则不会执行此操作。

我该如何解决?

研究

我可以通过监视来验证在环境变量更改期间容器命令没有运行/var/log/cfn-init.log;没有新条目添加到此日志中。

滚动更新类型“禁用”和“不可变”都会发生这种情况。

即使我将环境命令转换为平台钩子,也会发生这种情况,尽管更新环境属性时钩子被列为正在运行。

在我看来,有两种潜在的解决方案,但我不知道其中任何一个的 Elastic Beanstalk 设置:

  1. 让环境变量更改保留/var/app/current而不是替换它。
  2. 让环境变量更改运行容器命令。

有关容器命令的 Elastic Beanstalk 文档表示“仅在环境创建和部署期间执行仅领导者容器命令,而每次配置或更新实例时都会执行其他命令和服务器自定义操作。” 这是 Elastic Beanstalk 中的错误吗?

相关问题:EB:在配置更改时触发容器命令/部署脚本

amazon-web-services amazon-elastic-beanstalk

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

加入一组超时的python进程

我正在使用python的多处理库来创建多个进程.

from multiprocessing import Process
processes = [Process(target=function) for function in FUNCTIONS]
for p in processes:
    p.start()
Run Code Online (Sandbox Code Playgroud)

我希望它们运行一段时间,然后如果它们还没有完成,则终止它们.

DURATION = 3600
Run Code Online (Sandbox Code Playgroud)

这样做的一个坏方法如下(糟糕,因为如果进程比DURATION完成得快,它仍然等待所有DURATION):

from time import sleep
sleep(duration)
for p in processes:
    p.join(0)
    p.terminate()
Run Code Online (Sandbox Code Playgroud)

另一个坏方法(不好因为它可能需要N*DURATION完成,其中N是进程数):

for p in processes:
    p.join(DURATION)
    p.terminate()
Run Code Online (Sandbox Code Playgroud)

有什么好办法呢?

python multiprocessing

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

减少 NPM 内存使用

我正在npm install服务器上运行,但内存不足。服务器有 2GB RAM,小于 Node 的默认 4GB 限制。我正在观察内存分析,它在死亡之前使用了服务器的所有 RAM。我有一个非常小的 package.json 文件;我们谈论的是十几个软件包,仅仅为了进行少量 NPM 安装而必须设置交换似乎很愚蠢。

有什么方法可以让 NPM 在运行安装时使用更少的内存吗?

node.js npm npm-install

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

Elastic Beanstalk 平台挂钩失败并显示“权限被拒绝”

部署 Elastic Beanstalk 应用程序时,我的一个挂钩因“权限被拒绝”而失败。我得到以下内容/var/log/eb-engine.log

[信息] 运行平台挂钩:.platform/hooks/predeploy/collectstatic.sh

[错误] 执行命令 [app-deploy] - [RunAppDeployPreDeployHooks] 期间发生错误。停止运行该命令。错误:命令 .platform/hooks/predeploy/predeploy.sh 失败,错误 fork/exec .platform/hooks/predeploy/predeploy.sh:权限被拒绝

我该如何解决?

amazon-web-services amazon-elastic-beanstalk

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