Process.exit(self, :normal)做的工作,但它打印出来** (EXIT from #PID<0.49.0>) normal.有没有办法退出没有消息?
通过入门教程的主管和应用程序部分,我正在为底部的监督树问题编写单元测试.我尝试启动顶级主管,但失败了,出现此错误:
1) test all buckets die if registry dies (KV.SupervisorTest)
test/kv/supervisor_test.exs:4
** (EXIT from #PID<0.111.0>) shutdown: failed to start child: GenEvent
** (EXIT) already started: #PID<0.75.0>
Run Code Online (Sandbox Code Playgroud)
显然应用程序已经启动,因此我需要访问其工作进程.如果我有主管,我可以使用Supervisor.which_children来获取它们.要做到这一点,也许有助于运行kv应用程序:
iex(28)> kvpid = :application.info[:running][:kv]
#PID<0.77.0>
Run Code Online (Sandbox Code Playgroud)
所以现在我有了应用程序的PID.是否有某种方法可以从中获取根管理程序进程,或者我是否必须手动将其注册到某处以从测试中获取它?
或者有没有办法直接从他们的名字中获取工人?我试过:erlang.whereis但它找不到工人:
iex(33)> :erlang.whereis KV.Registry
:undefined
Run Code Online (Sandbox Code Playgroud)
我尝试直接使用模块的名称,但这也不起作用:
test "all buckets die if registry dies" do
reg = KV.Registry
KV.Registry.create(reg, "shopping")
{:ok, shopping_bucket} = KV.Registry.lookup(reg, "shopping")
Process.exit(reg, :shutdown)
assert_receive {:exit, "shopping", ^shopping_bucket}
end
Run Code Online (Sandbox Code Playgroud)
它失败并出现此错误:
1) test all buckets die if registry dies (KV.SupervisorTest) …Run Code Online (Sandbox Code Playgroud) 我想写这样的东西:
defmodule JobHunt.Repo.Migrations.CompaniesHaveManyJobs do
use Ecto.Migration
def change do
alter table (:companies) do
add :jobs, :has_many, Job
end
end
end
Run Code Online (Sandbox Code Playgroud)
mix ecto.migrate使用此迁移运行会出错,那么正确的方法是什么?
我跑了这个:
$ docker run -p 8080 --rm my_container
Run Code Online (Sandbox Code Playgroud)
我猜将容器端口 8080 映射到主机上的某个随机可用端口。但是我如何找出哪个端口?
我正在编写一个 ClockComponent 来了解 Phoenix LiveComponents。我几乎拥有它,但它正在向其父级发送 :tick 消息。我怎样才能让它向自己发送该消息?我想用myself()而不是self()但显然那不是一回事。
defmodule ClockComponent do
use Phoenix.LiveComponent
@impl true
def mount(socket) do
if connected?(socket), do: :timer.send_interval(1000, self(), :tick)
{:ok, assign(socket, date: :calendar.local_time())}
end
def handle_info(:tick, socket) do
{:noreply, assign(socket, date: :calendar.local_time())}
end
@impl true
def render(assigns) do
~L"""
The time is <%= @date |> Timex.to_datetime("America/Denver") |> Timex.format!("{RFC1123}") %>
"""
end
end
Run Code Online (Sandbox Code Playgroud) 主管在那里重启失败的进程.临时进程是永远不应重新启动的进程.那么,为什么要为主管打扰这种类型的孩子呢?是否主要是因为它们可以作为one_for_all策略的一部分终止,或者当应用程序终止时?
如果您要完全定义这些,为什么不将它们定义为
#define SIZEOF_INT sizeof(int)
Run Code Online (Sandbox Code Playgroud)
即使有人试图使用它们来编译不同的架构,它们也是正确的吗?
我想做一些似乎应该很简单的事情,即创建一个输出问候消息的脚本而不是其他内容.这个脚本非常简单,不需要多个文件.这是我试过的:
[ ~/elixir ] cat hello.exs
#!/usr/bin/env iex
IO.puts "Hello world!"
:init.stop
[ ~/elixir ] ./hello.exs
Erlang/OTP 17 [erts-6.3] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Hello world!
Interactive Elixir (1.0.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> [ ~/elixir ]
Run Code Online (Sandbox Code Playgroud)
这非常接近期望的结果,但我正在寻找像--quiet或--silent标志来抑制Erlang和Elixir启动消息.将-S标志添加到iex没有帮助:
[ ~/elixir ] cat hello.exs
#!/usr/bin/env iex -S
IO.puts "Hello world!"
:init.stop
[ ~/elixir ] ./hello.exs
Erlang/OTP 17 [erts-6.3] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
-S : Could not find executable ./hello.exs
Run Code Online (Sandbox Code Playgroud)
我知道有可能( …
这是我尝试使用的 aws-sdk-go 版本 53eb8b070e9a5067829fd029539966181632032a。
// main.go
package main
import (
"errors"
"fmt"
"log"
"net/http"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/sns"
"github.com/aws/aws-sdk-go/service/sqs"
)
func main() {
if err := makeTopicAndQueue(); err != nil {
log.Fatalf("aws-sns-sqs: %v", err)
}
}
func makeTopicAndQueue() error {
sess, err := session.NewSession(&aws.Config{
HTTPClient: &http.Client{},
Region: aws.String("us-east-2"),
Credentials: nil,
MaxRetries: aws.Int(0),
})
log.Printf("Creating an SNS topic.")
snsClient := sns.New(sess, &aws.Config{})
topicName := "test-topic"
out, err := snsClient.CreateTopic(&sns.CreateTopicInput{Name: aws.String(topicName)})
if err != nil {
return fmt.Errorf(`creating topic "%s": %v`, topicName, err) …Run Code Online (Sandbox Code Playgroud) 我正在重构一个 Go 项目,其中所有内容都在一个模块中,并拆分出子包。完成此操作后,会有许多导入周期。为了让项目再次编译,我必须消除它们。但是,在进行了我认为消除了周期的更改后,导入周期计数似乎保持不变。我用这个命令计算周期:
go build 2>&1 | grep package | wc -l
Run Code Online (Sandbox Code Playgroud)
即使我做了看起来应该删除一个周期的工作,甚至在我不再在列表中看到我删除的周期之后,它仍然报告 6。这让我想知道它是否只报告了问题的一部分。
我也尝试过
go build -gcflags="-e" 2>&1 | grep package | wc -l
Run Code Online (Sandbox Code Playgroud)
正如https://menno.io/posts/showing-all-go-compiler-errors/所建议的,但它给出了相同的结果。