运行 Elixir exq workers 时模块不可用
Module is not available when running Elixir exq workers
我已经使用 Elixir exq 构建了一个异步作业处理应用程序。文档说我可以 运行 使用终端(使用 iex -S mix
)或作为独立应用程序(使用 mix exq.run
)的应用程序。当我在终端上 运行 时,一切正常,但是当我 运行 独立应用程序时,我在获取作业时收到此消息:
16:52:55.028 [info] Elixir.MyWorker[128f902c-dd22-4706-95a2-89dc974b95d6] start
16:52:55.045 [error] Process #PID<0.196.0> raised an exception
** (UndefinedFunctionError) function MyWorker.perform/1 is undefined (module MyWorker is not available)
MyWorker.perform("arg1")
(exq 0.14.0) lib/exq/worker/server.ex:186: anonymous fn/4 in Exq.Worker.Server.dispatch_work/3
16:52:55.052 [info] Queueing job 128f902c-dd22-4706-95a2-89dc974b95d6 to retry in 24.0 seconds
我做错了什么?
这是我的 lib/my_worker.ex
文件:
defmodule MyWorker do
def perform(arg) do
IO.puts("teste: " <> arg)
end
end
和我的mix.exs
defmodule WorkersSandbox.MixProject do
use Mix.Project
def project do
[
app: :workers_sandbox,
version: "0.1.0",
elixir: "~> 1.10",
start_permanent: Mix.env() == :prod,
deps: deps()
]
end
# Run "mix help compile.app" to learn about applications.
def application do
[
applications: [:exq_ui, :exq],
extra_applications: [:logger]
]
end
# Run "mix help deps" to learn about dependencies.
defp deps do
[
{:exq, "~> 0.14.0"},
{:jason, "~> 1.0"},
{:exq_ui, "~> 0.11.0"},
{:plug_cowboy, "~> 2.0"}
]
end
end
和我的 config/config.exs
:
import Config
config :exq,
start_on_application: true,
name: Exq,
host: "127.0.0.1",
port: 6379,
# password: "",
namespace: "exq",
queues: [{"default", 10_000}, {"fila2", 10_000}],
poll_timeout: 50,
scheduler_poll_timeout: 200,
scheduler_enable: true,
max_retries: 25,
mode: :default,
shutdown_timeout: 5000
如 this issue、
中所述
您应该使用此命令启动工作程序:
mix do app.start, exq.run
或者只是
mix run --no-halt
在这些情况下应该有效。 exq.run mix 任务只是启动 exq 应用程序,而不是主应用程序。文档已更新以明确这一点。
我已经使用 Elixir exq 构建了一个异步作业处理应用程序。文档说我可以 运行 使用终端(使用 iex -S mix
)或作为独立应用程序(使用 mix exq.run
)的应用程序。当我在终端上 运行 时,一切正常,但是当我 运行 独立应用程序时,我在获取作业时收到此消息:
16:52:55.028 [info] Elixir.MyWorker[128f902c-dd22-4706-95a2-89dc974b95d6] start
16:52:55.045 [error] Process #PID<0.196.0> raised an exception
** (UndefinedFunctionError) function MyWorker.perform/1 is undefined (module MyWorker is not available)
MyWorker.perform("arg1")
(exq 0.14.0) lib/exq/worker/server.ex:186: anonymous fn/4 in Exq.Worker.Server.dispatch_work/3
16:52:55.052 [info] Queueing job 128f902c-dd22-4706-95a2-89dc974b95d6 to retry in 24.0 seconds
我做错了什么?
这是我的 lib/my_worker.ex
文件:
defmodule MyWorker do
def perform(arg) do
IO.puts("teste: " <> arg)
end
end
和我的mix.exs
defmodule WorkersSandbox.MixProject do
use Mix.Project
def project do
[
app: :workers_sandbox,
version: "0.1.0",
elixir: "~> 1.10",
start_permanent: Mix.env() == :prod,
deps: deps()
]
end
# Run "mix help compile.app" to learn about applications.
def application do
[
applications: [:exq_ui, :exq],
extra_applications: [:logger]
]
end
# Run "mix help deps" to learn about dependencies.
defp deps do
[
{:exq, "~> 0.14.0"},
{:jason, "~> 1.0"},
{:exq_ui, "~> 0.11.0"},
{:plug_cowboy, "~> 2.0"}
]
end
end
和我的 config/config.exs
:
import Config
config :exq,
start_on_application: true,
name: Exq,
host: "127.0.0.1",
port: 6379,
# password: "",
namespace: "exq",
queues: [{"default", 10_000}, {"fila2", 10_000}],
poll_timeout: 50,
scheduler_poll_timeout: 200,
scheduler_enable: true,
max_retries: 25,
mode: :default,
shutdown_timeout: 5000
如 this issue、
中所述您应该使用此命令启动工作程序:
mix do app.start, exq.run
或者只是
mix run --no-halt
在这些情况下应该有效。 exq.run mix 任务只是启动 exq 应用程序,而不是主应用程序。文档已更新以明确这一点。