小编Ant*_*ado的帖子

模块内部的相对路径

我有这个模块,需要一个特定的文件才能工作。您可以传递您要使用或不使用的文件的路径。如果不这样做,那么将采用默认文件。该默认文件位于资源文件夹中,因此我将路径键入为:“ resources / data / type-graph.txt”。问题是,这不起作用,因为它将我的CWD作为根目录。

您知道如何建立相对于模块目录的路径吗?

任何建议表示赞赏:)。

module perl6 zef

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

您如何调用名称为变量的函数?

我正在尝试使用此语法来调用函数"$name"()。我知道这适用于方法,但是如果有一种方法可以使用模块中的函数来执行此操作,则不会。

我已经尝试过此=> sub b(){say "b";}; "b"();,但是它不起作用。

任何的想法?

syntax function perl6

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

为什么这个Duckmap阻塞了?

我正在尝试使用此功能列出目录中的所有文件:

sub list-directory($dir = '.') {
    my @todo = $dir.IO.dir;
    @todo = @todo.duckmap( -> $_ where $_.d { @todo.push($_.IO.dir); } );
    @todo = @todo.duckmap( -> $_ where IO {.Str} );
    return @todo;
}
Run Code Online (Sandbox Code Playgroud)

第一个duckmap是列出所有子目录,第二个(尚未完成)是将IO对象转换为Str。

有人知道第二个为什么不停止吗?

perl6

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

多个MAIN签名

我有一个包含多个main的包,并且想定义几个选项:

我的代码是这样的:

package Perl6::Documentable::CLI {
    proto MAIN(|) is export {*}
    my %*SUB-MAIN-OPTS = :named-everywhere;

    multi MAIN(
        "setup"
    ) { ... }

    multi MAIN (
        "start"                           ,
        Str  :$topdir              = "doc",
        Bool :v(:verbose($v))      = False
    ) { ... }
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用以下命令实际执行它时:

perl6 -Ilib bin/documentable start -v --topdir=ss
Run Code Online (Sandbox Code Playgroud)

它输出以下行:

Usage:
  bin/documentable [--topdir=<Str>] [-v|--verbose] start
Run Code Online (Sandbox Code Playgroud)

我正在使用%* SUB-MAIN-OPTS,但看来这也不起作用。

signature perl6 raku

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

重载包函数以检测未使用任何参数

我试图重载一个函数来检测没有传递参数:

package Documentable::CLI {

        sub RUN-MAIN(|c) is export {
            my %*SUB-MAIN-OPTS = :named-anywhere;
            CORE::<&RUN-MAIN>(|c)
        }

        our proto MAIN(|) is export { * }

        multi MAIN (
            Bool :V(:$version)
        ) {}

        multi MAIN () {
            say 'Execute "documentable --help" for more information'
        }

    }

    # no output
    Documentable::CLI::MAIN();
Run Code Online (Sandbox Code Playgroud)

如果您尝试使用multi main (*@args) {}它也不会起作用。但是,如果您删除第一个multi MAIN定义,一切都会顺利进行。知道如何解决吗?

rakudo raku

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

执行包函数的意外输出

我有以下目录结构(重现问题的简化版本):

testing/
  lib/
   CLI.pm6
  t/
    01-test.t
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看来源。问题是,如果您运行,raku -Ilib t/01-test.t您将获得以下输出:

    ok 1 - show help message
    1..1
ok 1 - no arguments provided
    not ok 1 - long version
    # Failed test 'long version'
    # at site#sources\D2E3739A3B53AD1F7CFEE6DA262613FD174A0BC9 (Test::Output) line 84
    # expected a match with: /Documentable\sversion/
    #                   got: "version\r\n"
    1..1
    # You failed 1 test of 1
not ok 2 - version command
# Failed test 'version command'
# at t\01-test.t line 12
1..2
# You failed …
Run Code Online (Sandbox Code Playgroud)

raku

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

在接收器上下文中(第13行)在表达式“ -1”中无用的“-”

我正在尝试对使用以下代码引发异常的功能进行测试:

use v6;
use Test;

plan *;

use lib "lib";
use Math::ConvergenceMethods;

sub f ($x) {return $x + 1;}


{
    is-approx: bisection(&f, -2, 0), -1;
    dies-ok: { bisection(&f, 3, 2) }, "Incorrect arguments";
}

done-testing;
Run Code Online (Sandbox Code Playgroud)

并且在我运行它时返回以下警告:

WARNINGS for /home/antonio/Code/perl6/Math-ConvergenceMethods/t/bisection.t:
Useless use of "-" in expression "-1" in sink context (line 13)
Useless use of constant string "Incorrect arguments" in sink context (lines 14, 14)
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

perl6

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

如何获取模块的版本

我正在尝试实现模块的--version选项,但是我不知道如何访问META6.json文件。任何想法如何?我可以复制到资源目录,但这是LTA。

version perl6 zef raku

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

如何在 Open API 规范中使用 Postman 变量

我们正在为当前的 API 制定开放 API 规范。我们希望将生成的文件与 Postman 集成,以生成集合并能够轻松发出请求,而无需在进行新更改时更新集合。

现在,我正在使用以下内容:

openapi: 3.0.0
info:
  version: '1.0.0'
  title: 'Objects API'
servers:
  - url: '{{HOST}}/api/3/users/{{USER_ID}}'
Run Code Online (Sandbox Code Playgroud)

如果我使用它,那么生成的集合看起来像这样:

在此输入图像描述

所以它可以工作,但问题是,如果我们现在将 OpenAPI 文件与 swagger 集成,所有内容{{...}}都会出现在文档中。

我看到邮递员在集合上生成了一些变量,例如baseUrl

在此输入图像描述

虽然我真的不知道如何在自动生成的请求中使用该变量(也就是说,请求是使用该变量生成的)。

有什么想法/技巧可以解决这个问题并使我们的收藏品尽可能被他们使用吗?理想情况下,用例是在 Postman 上导入 OpenAPI 文件并开始发出有效请求,替换尽可能少的值。

postman openapi

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

如何让 celery Worker 停止接收新任务 (Kubernetes)

因此,我们有一个 kubernetes 集群,运行一些带有 celery 工作线程的 pod。我们使用 python3.6 来运行这些工作程序,celery 版本是 3.1.2(我知道,真的很旧,我们正在努力升级它)。我们还设置了一些自动缩放机制来动态添加更多芹菜工作人员。

问题如下。假设在任何给定时间我们都有 5 个工人。然后会出现大量任务,从而增加 Pod 的 CPU/RAM 使用率。这会触发一个自动缩放事件,比方说,添加两个 celery 工作单元。所以现在这两个新的 celery 工人承担了一些长时间运行的任务。在完成运行这些任务之前,kubernetes 会创建一个缩减事件,杀死这两个工作人员,并杀死那些长时间运行的任务。

此外,由于遗留原因,如果任务未完成,我们没有重试机制(并且我们现在无法实现)。

所以我的问题是,有没有办法告诉 kubernetes 等待 celery 工作线程运行完所有待处理的任务?我想解决方案必须包括某种方法来通知芹菜工作人员以使其停止接收新任务。现在我知道 Kubernetes 有一些脚本可以处理这种情况,但我不知道在这些脚本上写什么,因为我不知道如何让 celery Worker 停止接收任务。

任何想法?

celery celery-task python-3.x django-celery kubernetes

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

为什么我会收到此已过时的警告?!MongoDB

我正在NodeJS中使用MongoDB,

    const { MongoClient, ObjectId } = require("mongodb");

const MONGO_URI = `mongodb://xxx:xxx@xxx/?authSource=xxx`; // prettier-ignore

class MongoLib {

  constructor() {
    this.client = new MongoClient(MONGO_URI, {
      useNewUrlParser: true,
    });
    this.dbName = DB_NAME;
  }

  connect() {
    return new Promise((resolve, reject) => {
      this.client.connect(error => {
        if (error) {
          reject(error);
        }
        resolve(this.client.db(this.dbName));
      });
    });
  }
  async getUser(collection, username) {
    return this.connect().then(db => {
      return db
        .collection(collection)
        .find({ username })
        .toArray();
    });
  }
}

let c = new MongoLib();

c.getUser("users", "pepito").then(result => console.log(result));
c.getUser("users", "pepito").then(result …
Run Code Online (Sandbox Code Playgroud)

javascript mongodb node.js

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