小编all*_*mon的帖子

在 PostgreSQL 中声明“not-null-string”数组类型的列

使用 PostgreSQL 9.6,我可以创建一个类型为“not-null-array of string”的列:

CREATE TABLE example (
    foo TEXT[] NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

但这允许元素为空,即我可以这样做:

INSERT INTO example VALUES('{NULL}') 
Run Code Online (Sandbox Code Playgroud)

有没有办法创建一个类型为“非空字符串的非空数组”的列?我想要这样的东西:

CREATE TABLE example (
    foo (NOT NULL TEXT)[] NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

但它在语法上无效。有没有有效的方式来表达这一点?

postgresql

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

文件无效:android-sdk-linux/extras/android/support/v7/appcompat/build.xml

我正在尝试仅从命令行创建一个Android应用程序,ant 我已经完成了以下步骤:

  1. 下载appcompat v7和v4
  2. 我跑了 android update project --target 1 --path . --library ../../Downloads/android-sdk-linux/extras/android/support/v7/appcompat

现在,当我运行该命令时,ant debug我收到以下错误消息:

[dependency] ------------------
[dependency] Ordered libraries:
[dependency] 
[dependency] ------------------
     [echo] ----------
     [echo] Building Libraries with 'debug'...

BUILD FAILED
/home/xxxx/Downloads/android-sdk-linux/tools/ant/build.xml:601: Invalid file: /home/xxxx/Downloads/android-sdk-linux/extras/android/support/v7/appcompat/build.xml
Run Code Online (Sandbox Code Playgroud)

我也测试了这个项目

使用它,我得到了完全相同的错误,实际上该目录中没有文件"build.xml".

我特意寻找命令行答案,目的是了解"神奇".问题来自我,还是我错过了什么?

ant android command-line-interface

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

Ansible galaxy provisionner在Vagrant中没有使用私钥

我有以下vagrantfile

Vagrant.configure(2) do |config|

  config.ssh.insert_key = true
  config.vm.define "dev" do |app|
    app.vm.provider "docker" do |d|
      d.image = "allansimon/allan-docker-dev-python"
      d.has_ssh = true
    end

    app.ssh.username = "vagrant"

    app.vm.provision "file", source: "~/.ssh/id_rsa", destination: ".ssh/id_rsa"


    app.vm.provision "permits-root-to-clone", type: "shell" do |s|
      s.inline = "cp /home/vagrant/.ssh/id_rsa /root/.ssh/id_rsa"
    end
    # if i put here a new shell provisionner , to the exact same repo than in my galaxy roles , it works

    app.vm.provision "ansible_local" do |ansible|
      ansible.galaxy_role_file = "build_scripts/ansible/requirements.yml"
      ansible.playbook = "build_scripts/ansible/bootstrap.yml"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

该 …

git ssh-keys vagrant ansible ansible-galaxy

5
推荐指数
0
解决办法
603
查看次数

如果 nginx 发送 499 错误,请求是否“丢失”?

这是架构

客户端---->负载均衡器--->nginx----->应用程序

该应用程序是单线程的,并且是同步的(没有异步io花哨的东西)

负载均衡器和 nginx 都有 60 秒超时

应用程序只有一个端点,需要 10 秒来处理(直接调用应用程序时),当没有流量时,通过负载均衡器的卷曲也需要 10 秒(这是正常的)

现在在高负载期间,我们在 nginx 日志中看到大量 499 与 60 左右的响应时间相关

我目前的假设是

  1. 10 个请求到达负载均衡器前面
  2. 负载均衡器将 10 个请求转发给 nginx,并为这 10 个请求启动计时器
  3. Nginx 确认 10 个请求,启动 10 个请求的计时器,并将代理 1 发送给应用程序,其他 9 个请求等待
  4. 第一个请求完成,nginx转发200响应,nginx和LB耗时10秒
  5. nginx 现在向应用程序发送第二个请求需要 10 秒
  6. nginx 收到 200 响应,所用时间:nginx 和 LB 20 秒
  7. 第三个请求 => 30 秒,第四个请求 => 40 秒
  8. 应用程序收到第 6 个请求,但为时已晚,LB 关闭连接,超时
  9. nginx 看到关闭的连接并回复 499
  10. 第 7、8 和 9 个请求也是如此,所有请求的响应时间均为 60 秒

现在我的问题是:

  1. 我对正在发生的事情的理解正确吗?
  2. 应用程序是否完全处理了第 6 个请求?
  3. 应用程序是否会处理上述第七个请求,或者应用程序永远不会知道有第七个或更多请求?

timeout nginx

5
推荐指数
0
解决办法
852
查看次数

Symfony3表单验证未被模型转换器用于字段使用

编辑:这是一个带有完整代码的github来重现问题

我有以下实体

class Place
{
    use Traits\HasId;

    /**
     * Used for form.
     *
     * @Assert\Image(
     *     mimeTypes = {"image/png", "image/jpeg"},
     *     minWidth = 50,
     *     maxWidth = 1000,
     *     minHeight = 50,
     *     maxHeight = 1000,
     *     maxSize = "1M"
     * )
     */
    private $imageFile = null;

    /**
     * @ORM\OneToOne(targetEntity="MyImage", orphanRemoval=true, cascade={"persist"})
     */
    protected $image;

}
Run Code Online (Sandbox Code Playgroud)

使用以下表格

class AdminPlaceType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $transformer = new HasImageTransformer();
        $builder->add('imageFile')->addModelTransformer($transformer);
    }

    public function configureOptions(OptionsResolver …
Run Code Online (Sandbox Code Playgroud)

php symfony symfony-validator

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

Celery: it ignores the exchange name when sending a task

I have a very simple code:

celery = Celery(broker="amqp://guest:guest@172.17.0.1:5672/")                                                                                                                                                                                                           
celery.send_task(                                                                                                                                                                                                                            
    "robot.worker",                                                                                                                                                                                                                
    kwargs={},                                                                                                                                                                                                                               
    exchange="I_am_useless", # with  exchange=Exchange("I_am_useless") I got the same results                                                                                                                                                                                                          
)                                                                                                                                                                                                                                            
Run Code Online (Sandbox Code Playgroud)

我真的需要将任务发送到交换“I_am_useless”,但是它没有发送到那里,当我在 AMQP 协议级别调试时,我看到发送了一个发布事件(可以)但具有以下特征

reserved-1': 0,
'exchange-name': '',
'routing-key': 'celery',
'mandatory': False,
'immediate': False
Run Code Online (Sandbox Code Playgroud)

因此似乎该参数完全被忽略,因为即使在交换声明事件期间,也会使用名称“celery”。但根据文档send_task采用与https://docs.celeryproject.org/en/latest/reference/celery.app.task.html#celery.app.task.Task.apply_async相同的参数,我们可以看到有一个应接受字符串的“交换”参数。

但是如果我直接打电话给kombu

rabbit_url = "amqp://guest:guest@172.17.0.1:5672/"                                                                                                                                                                                           
conn = Connection(rabbit_url)                                                                                                                                                                                                               
channel = conn.channel()                                                                                                                                                                                                                    
exchange = Exchange("example-exchange", type="direct")                                                                                                                                                                                      
producer = Producer(exchange=exchange, channel=channel, routing_key="BOB")                                                                                                                                                                  
queue = Queue(name="example-queue", exchange=exchange, routing_key="BOB")                                                                                                                                                                   
queue.maybe_bind(conn)                                                                                                                                                                                                                      
queue.declare()                                                                                                                                                                                                                             
producer.publish("Hello there!")                                                                                                                                                                                                            

Run Code Online (Sandbox Code Playgroud)

我正确地看到了交易所名称,所以我想知道我做错了什么?

python celery celery-task kombu

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

Terraform:InvalidParameterException:PutSubscriptionFilter操作无法与供应商es的destinationArn一起使用

我正在尝试复制AWS控制台功能,只需单击一个日志组,然后在ES上选择流,然后选择我的托管ES之一。

我以为aws_cloudwatch_log_subscription_filter是我要找的东西。即使文档说它只是Kinesis和Lambda,我还是对自己说:“也许文档是旧的/不完整的”

所以我尝试了

resource "aws_cloudwatch_log_subscription_filter" "whatever" {                                                                                                                                                                      
  name            = "lambda_logs_to_es"                                                                                                                                                                           
  role_arn        = aws_iam_role.my_lamda_role.arn                                                                                                                                                                            
  log_group_name  = aws_cloudwatch_log_group.my_log_group.name                                                                                                                                                                
  filter_pattern  = ""                                                                                                                                                                                                                       
  destination_arn = "arn:aws:es:eu-west-3:585399047133:domain/my-es"                                                                                                                          
}    
Run Code Online (Sandbox Code Playgroud)

毫不奇怪,它告诉我

Terraform  InvalidParameterException: PutSubscriptionFilter operation cannot work with destinationArn for vendor es
Run Code Online (Sandbox Code Playgroud)

因此,是否有使用terraform复制此功能的简单方法,而无需编写我自己的lambda并将我的其他lambda(lambda-ception)的日志转发给ES?(这是我从AWS选择ES而不是安装自己的ES的原因之一,感觉它可以更好地与其他AWS服务集成)?

即是否已经有使用该lambda的lambda和terrafor模块(如果可能的话,由AWS支持)来执行此功能?

terraform terraform-provider-aws

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

Doctrine2,通过多个属性的计数获取实体顺序

我有两个实体

  • 文章
  • 用户

文章与名为'likesByUsers'的用户有关系

现在,我想通过喜欢的数量订购文章,但是:

  • 我不想拥有属性'numberOfLikes'因为保持更新太多问题了
  • 我有太多的文章(100k +)对PHP方面的"排序"是现实的(事实上我们达到排序的限制是我问这个问题的原因)
  • 我可以忍受在返回值中没有得到喜欢的数量(因为序列化器稍后会使它水合)

我现在拥有的是:

$builder = $this->createQueryBuilder('a');
    ->select('COUNT(u) AS nbrLikes')
    ->leftJoin('a.likedByUsers', 'u') 
    ->orderBy('nbrLikes', 'DESC')
    ->groupBy('a.id')
    ->getQuery()
    ->getResult()
;
Run Code Online (Sandbox Code Playgroud)

这正确地返回了喜欢的数量(对于没有喜欢的文章,为0),但它不会返回文章本身

我试过添加

->select('a, COUNT(u) AS HIDDEN nbrLikes')
Run Code Online (Sandbox Code Playgroud)

但它失败了,因为a它不属于GROUP BY

有任何想法吗 ?

php sql dql symfony doctrine-orm

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

如何使用Vagrant,ansible和docker使Linux开发机器尽可能接近生产

很抱歉这里的非明确标题是我想要实现的目标

  • 让我的web应用程序运行docker(一个容器用于数据库,一个用于缓存,一个用于php-fpm +代码)
  • 在生产中因为我没有流浪汉,我希望与docker模块的标准ansible能够提供环境
  • 因为我的开发人员有linux机器和vagrant支持docker作为提供者我希望这些docker容器直接在没有VM的dev机器上运行(因为我们有很多项目,通过项目保持一个VM很快耗尽RAM,并且我们需要经常停机/停机,特别是在维修阶段)
  • 我们在Mac/Windows上有一些开发人员,所以我们仍然需要vagrant来提供抽象层"vagrant up"来创建一个简单的dev环境创建.

我知道如何在台机器上使用Vagrant + Ansible配置,我知道如何使用anser与docker模块创建一个完整的环境,遵循以下示例

http://docs.ansible.com/docker_module.html

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.provision :ansible do |ansible|
      ansible.playbook = 'provisioning/site.yml'
      ansible.extra_vars = app_vars
      ansible.verbose = verbosity_arg
  end
end
Run Code Online (Sandbox Code Playgroud)

但它会在虚拟机内运行

我知道如何使用Vagrant在一个vagrant文​​件中创建多个机器

Vagrant.configure(2) do |config|
  config.vm.define :dbmachine do |dbmachine|
    dbmachine.vm.provider = "docker" do |d|
       ...
    end
  end
  config.vm.define :cachemachine do |cachemachine|
    cachemachine.vm.provider = "docker" do |d|
       ...
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但是在生产/分期中,因为我没有流浪汉,所以我不再有描述这种架构的东西了

那么有没有办法将这些东西组合在一起以满足我的需求?

vagrant ansible docker

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

golang生成功能测试的代码覆盖率

我有一个 go webservices(REST Api),我们对其进行了单元测试,并且 go cover 工作得很好。

现在我们有一个用 python 编写的测试套件,它启动服务器实例,运行测试,停止服务器。

我想知道是否有一些工具允许我使用特定标志运行我的服务器二进制文件,以便最后它打印我的“黑盒”测试执行的测试的覆盖范围?

谢谢。

code-coverage functional-testing go

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