elixir mix app 看不懂

elixir mix app cannot understand clearly

我尝试使用长生不老药。

有点难理解application.ex

defmodule PluralsightTweet.Application do
  # See http://elixir-lang.org/docs/stable/elixir/Application.html
  # for more information on OTP Applications
  @moduledoc false

  use Application

  def start(_type, _args) do
    import Supervisor.Spec, warn: false

    # Define workers and child supervisors to be supervised
    children = [
      # Starts a worker by calling: PluralsightTweet.Worker.start_link(arg1, arg2, arg3)
       worker(PluralsightTweet.TweetServer, [])
    ]

    # See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
    # for other strategies and supported options
    opts = [strategy: :one_for_one, name: PluralsightTweet.Supervisor]
    process = Supervisor.start_link(children, opts)
    PluralsightTweet.Scheduler.schedule_file("* * * * *", Path.join("#{:code.priv_dir(:pluralsight_tweet)}",
    "sample.txt"))
    process
  end
end

我正在学习 pluralsight elixir 教程 这是调度程序,每分钟通过阅读文本文件发送文本

任务成功但没有crystal关于过程的明确理想

谁能解释一下里面发生了什么application.ex 运行 作为主管应用

use Application

这一行表示当前模块是一个应用程序的入口。这样的模块可以配置在mix.exs中作为一个单元启动。

# Inside mix.exs
def application do
  [
    extra_applications: [:logger],
    mod: {PluralsightTweet.Application, []}  # <-- this line
  ]
end

start函数

该函数为应用启动时的回调。您可以将其视为某些其他语言中的 main 函数。

import Supervisor.Spec, warn: false

它只是让您在调用 workersupervisorsupervise 时省略模块名称。即使您不调用任何这些函数,warn: false 部分也会抑制警告。

children = [worker(PluralsightTweet.TweetServer, [])]

此行指定您的应用程序监管的子进程。请注意,此时尚未生成子进程。

worker(mod, args)只是定义了一个worker spec,稍后会启动。 args 将在启动 worker 时传递给 modstart_link 函数。

opts = [strategy: :one_for_one, name: PluralsightTweet.Supervisor]

主管选项。

参见strategies documentation了解strategy: :one_for_one和其他策略的含义。

因为你只有一个工人,所以除了 :simple_one_for_one 之外的所有策略都非常有效。

棘手的部分是 name: PluralsightTweet.Supervisor。您可能想知道模块 PluralsightTweet.Supervisor 是从哪里来的。事实是它不是一个模块。只是一个原子:"Elixir.PluralsightTweet.Supervisor",作为supervisor进程的名字

Supervisor.start_link(children, opts)

现在生成主管进程及其子进程。