标签: elixir-mix

将 shell 脚本作为混​​合别名运行

如何将 shell 脚本作为混​​合别名运行?

我试过以下没有运气:

defp aliases() do
  [
    "test": [ "./scripts/test.sh" ]
  ]
end

defp aliases() do
  [
    "test": [ "scripts/test.sh" ]
  ]
end
Run Code Online (Sandbox Code Playgroud)

每个返回的变化为:

** (Mix) The task "./scripts/test" could not be found

elixir-mix elixir

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

如何使用 Mix CLI 安装早期版本的 Phoenix?

无法使用mix archive.install命令安装比最新稳定版(例如 1.4.0)更早的 Phoenix 版本(例如 1.3.4)。

根据此线程未实现的解决方案:https : //github.com/phoenixframework/phoenix/issues/2991

$ mix archive.install hex phx_new 1.3.4
** (Mix) No matching version for phx_new 1.3.4 (from: mix.exs) in registry

The latest version is: 1.4.0
Run Code Online (Sandbox Code Playgroud)

elixir-mix elixir phoenix-framework asdf-vm

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

如何将命令行参数传递给 mix run --no-halt

所以我有一个遵循以下布局的应用程序模块:

defmodule Project.Application do


  use Application

  def start(_type, _args) do
    children = [
      randomchild1,
      randomchild2,
      {Project.runapp, "argument" }
    ]

    opts = [strategy: :one_for_all, name: Project.Supervisor]
    Supervisor.start_link(children, opts)
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,当我运行它时,我使用它mix run --no-halt并且运行完美。

我想用在命令行中传递的值替换“参数”?我不知道如何向mix run --no-halt.

我想做的就是将一个值传递给 start 方法并使用它来定义子进程。

elixir-mix elixir elixir-iex erlang-supervisor

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

Elixir Mix 版本 - 如何将额外的文件复制到 Phoenix 应用程序的 tarball 中?

我编写了以下 mix.ex 以将我的 Phoenix 应用程序作为 tar 球发布,请参阅 Mix.Tasks.Release 文档的 \xe2\x80\x9cSteps\xe2\x80\x9d部分

\n
defmodule MyApp.MixProject do\n  use Mix.Project\n\n  def project do\n    [\n      apps_path: "apps",\n      apps: [:shared, :admin, :shop],\n      version: "0.1.0",\n      start_permanent: Mix.env() in [:qa, :prod],\n      deps: deps(),\n      releases: [\n        my_app: [\n          applications: [\n            admin: :permanent,\n            shop: :permanent\n          ],\n          steps: [:assemble, &copy_extra_files/1, :tar]\n        ]\n      ],\n      default_release: :my_app\n    ]\n  end\n\n  defp copy_extra_files(release) do\n    File.cp_r("apps/shared/priv/repo/seeds", release.path <> "/seeds")\n    release\n  end\n\n  defp deps do\n    []\n  end\nend\n
Run Code Online (Sandbox Code Playgroud)\n

当我运行 时MIX_ENV=qa mix release my_app,它 …

elixir-mix elixir phoenix-framework

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

Elixir 自定义任务未显示在“混合帮助”上

以下代码不足以列出自定义任务吗mix help

defmodule Mix.Tasks.Start do
  use Mix.Task

  @shortdoc "Starts [App]"
  def run(_) do
    IO.puts("Starting [App]...")
  end
end
Run Code Online (Sandbox Code Playgroud)

我认为装饰器@shortdoc足以列出我的自定义任务,mix help但我重新编译了我的代码,但我的自定义任务没有列出在 上mix help

elixir-mix elixir

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

使用Mix强制更新包

当我使用以下命令

mix deps.update --all

mix如果mix.ex文件中尚未更改软件包的版本,则将使用本地缓存的软件包.所以问题是,我如何强制mix不使用缓存版本并从服务器下载呢?例如,如果某个软件包的最后一个版本发生了变化,我想选择那些软件包,即使版本没有被碰到.

elixir-mix elixir phoenix-framework

3
推荐指数
1
解决办法
1038
查看次数

在Elixir应用程序中加载Erlang项目

我正在构建一个使用hackneyErlang项目的Elixir应用程序,我无法使用hackney提供的方法.我mix.exs看起来像这样:

defmodule Connecter.Mixfile do
  use Mix.Project

  def project do
    [app: :connecter,
     version: "0.0.1",
     elixir: "~> 1.2-dev",
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     deps: deps]
  end

  # Configuration for the OTP application
  #
  # Type "mix help compile.app" for more information
  def application do
    [applications: [:logger]]
  end

  # Dependencies can be Hex packages:
  #
  #   {:mydep, "~> 0.3.0"}
  #
  # Or git/path repositories:
  #
  #   {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"}
  #
  # Type "mix help …
Run Code Online (Sandbox Code Playgroud)

elixir-mix elixir

3
推荐指数
1
解决办法
343
查看次数

处理混合中的配置值

我目前正在努力处理混合中的配置值(特别是在运行测试时).这是我的情景:

  • 我有一个客户端库,有一些常见的配置值(密钥,密钥,区域).
  • 我想测试没有设置区域值时会发生什么
  • 我没有test.exs档案/config

我现在正在这样做(这不起作用).正在测试的模块(简化):

defmodule Streamex.Client do
  @api_region Application.get_env(:streamex, :region)
  @api_key Application.get_env(:streamex, :key)
  @api_secret Application.get_env(:streamex, :secret)
  @api_version "v1.0"
  @api_url "api.getstream.io/api"

  def full_url(%Request{} = r) do
    url = <<"?api_key=", @api_key :: binary>>
  end
end
Run Code Online (Sandbox Code Playgroud)

测试:

setup_all do
  Streamex.start
  Application.put_env :streamex, :key, "KEY"
  Application.put_env :streamex, :secret, "SECRET"
  Application.put_env :streamex, :secret, ""
end
Run Code Online (Sandbox Code Playgroud)

运行时会发生的情况mix test是主模块(从这些值设置属性)会抛出以下错误,因为它找不到有效值:

lib/streamex/client.ex:36: invalid literal nil in <<>>
Run Code Online (Sandbox Code Playgroud)

我还在开始,所以这看起来很明显,但在阅读完文档后我找不到解决方案.

elixir-mix elixir

3
推荐指数
1
解决办法
667
查看次数

混合测试 - 测试模式与任何文件都不匹配

我为我的Elixir项目写了一些测试并将它们放在test/目录中.现在我跑了mix test,我得到:

$ mix test
Test patterns did not match any file: 
Run Code Online (Sandbox Code Playgroud)

就是这样,之后什么都没有.我是否必须手动设置测试路径?快速谷歌搜索没有透露任何信息.


这就是我所有测试的样子:

# project_dir/test/my_app/some_module.exs

defmodule MyApp.SomeModule.Test do
  use ExUnit.Case
  doctest MyApp.SomeModule

  test "method 1" do
    assert MyApp.SomeModule.method_1_works?
  end

  test "method 2" do
    assert MyApp.SomeModule.method_2_works?
  end
end 
Run Code Online (Sandbox Code Playgroud)

elixir-mix elixir

3
推荐指数
1
解决办法
1010
查看次数

自定义混合任务中的ets.lookup_element(Ecto.Registry,nil,3)

在lib/mix/tasks/load_mnemonics.ex下创建自定义任务从CSV文件批量插入数据库表时出现奇怪的错误.执行任务的命令是

混合data_monitor.load_mnemonics

defmodule Mix.Tasks.DataMonitor.LoadMnemonics do
  use Mix.Task

  alias DataMonitor.Mnemonic
  alias DataMonitor.Repo

  require Logger

  @shortdoc "Loads mnemonics from mnemonics.csv"

  def run(_) do
    mnemonics =
      File.stream!(Path.expand("files/mnemonics.csv"))
      |> CSV.decode!(headers: true)

    insert_rows =
      Enum.reduce(mnemonics, [], fn row, result ->
        result ++
          [
            row
            |> Map.new(fn {k, v} -> {String.to_atom(k), v} end)
            |> Map.put(:inserted_at, Timex.now())
            |> Map.put(:updated_at, Timex.now())
          ]
      end)

    Repo.insert_all(Mnemonic, insert_rows)
  end
end
Run Code Online (Sandbox Code Playgroud)

错误日志:

** (ArgumentError) argument error
    (stdlib) :ets.lookup_element(Ecto.Registry, nil, 3)
    lib/ecto/registry.ex:18: Ecto.Registry.lookup/1
    lib/ecto/adapters/sql.ex:251: Ecto.Adapters.SQL.sql_call/6
    lib/ecto/adapters/sql.ex:198: Ecto.Adapters.SQL.query!/5
    lib/ecto/adapters/postgres.ex:96: Ecto.Adapters.Postgres.insert_all/7
    lib/ecto/repo/schema.ex:52: Ecto.Repo.Schema.do_insert_all/7
    (mix) lib/mix/task.ex:314: …
Run Code Online (Sandbox Code Playgroud)

elixir-mix elixir ecto

3
推荐指数
1
解决办法
998
查看次数