Ошибка зависимостей шестнадцатеричного пакета Addict в Windows, которая не возникает на Mac

Я попытался установить пакет addict в свой проект Phoenix, но получаю сообщение об ошибке. Я попробовал тот же процесс на Mac коллеги, и он не получил ошибку, в то время как я делаю это на Windows. Ошибка возникает из-за зависимости Comeonin. Я также пробовал это как в Phoenix 0.14, так и в обновлении 0.15, которое было выпущено вчера.

Шаги по воссозданию:

  1. Создайте новый проект и запустите его

    $ mix phoenix.new testAddict
    $ cd testAddict
    $ mix ecto.create
    $ mix phoenix.server
    
  2. Добавьте addict в mix.exs:

    defp deps do
      [{:phoenix, "~> 0.15"},
        {:phoenix_ecto, "~> 0.8"},
        {:postgrex, ">= 0.0.0"},
        {:phoenix_html, "~> 1.4"},
        {:phoenix_live_reload, "~> 0.5", only: :dev},
        {:addict, "~> 0.0.5"},
        {:cowboy, "~> 1.0"}]
    end
    
  3. Зависимости компиляции:

    $ mix deps.get

Полученные результаты:

Running dependency resolution
Dependency resolution completed successfully
  addict: v0.0.5
  comeonin: v0.11.3
  mailgun: v0.0.2
* Getting addict (Hex package)
Checking package (https://s3.amazonaws.com/s3.hex.pm/tarballs/addict-0.0.5.tar)
Using locally cached package
Unpacked package tarball (c:/Users/mesos_000/.hex/packages/addict-0.0.5.tar)
* Getting mailgun (Hex package)
Checking package (https://s3.amazonaws.com/s3.hex.pm/tarballs/mailgun-0.0.2.tar)
Using locally cached package
Unpacked package tarball (c:/Users/mesos_000/.hex/packages/mailgun-0.0.2.tar)
* Getting comeonin (Hex package)
Checking package (https://s3.amazonaws.com/s3.hex.pm/tarballs/comeonin-0.11.3.tar)
Using locally cached package
Unpacked package tarball (c:/Users/mesos_000/.hex/packages/comeonin-0.11.3.tar)
  1. Снова запустите проект Phoenix:

    $ mix phoenix.server

Результаты (вот ошибка):

==> mailgun
Compiled lib/mailgun.ex
Compiled lib/client.ex
Generated mailgun app
==> comeonin
could not compile dependency comeonin, mix compile failed. You can recompile this dependency with `mix deps.compile comeonin` or update it with `mix deps.update comeonin`

** (ErlangError) erlang error: :enoent
    (elixir) lib/system.ex:440: System.cmd("nmake", ["/F", "Makefile.win", "priv\\bcrypt_nif.dll"], [stderr_to_stdout: true])
    mix.exs:15: Mix.Tasks.Compile.Comeonin.run/1
    (elixir) lib/enum.ex:977: anonymous fn/3 in Enum.map/2
    (elixir) lib/enum.ex:1261: Enum."-reduce/3-lists^foldl/2-0-"/3
    (elixir) lib/enum.ex:977: Enum.map/2
    (mix) lib/mix/tasks/compile.all.ex:15: Mix.Tasks.Compile.All.run/1
    (mix) lib/mix/tasks/compile.ex:64: Mix.Tasks.Compile.run/1
    (mix) lib/mix/tasks/deps.compile.ex:105: anonymous fn/2 in Mix.Tasks.Deps.Compile.do_mix/1
  1. Попробуйте предложения:

    $ mix deps.compile comeonin

Полученные результаты:

Running dependency resolution
Dependency resolution completed successfully
  comeonin: v0.11.3
$ mix phoenix.server

Результат: та же ошибка, что и выше.

$ mix deps.update comeonin

Полученные результаты:

==> comeonin
could not compile dependency comeonin, mix compile failed. You can recompile this dependency with `mix deps.compile comeonin` or update it with `mix deps.update comeonin`

** (ErlangError) erlang error: :enoent
    (elixir) lib/system.ex:440: System.cmd("nmake", ["/F", "Makefile.win", "priv\\bcrypt_nif.dll"], [stderr_to_stdout: true])
    mix.exs:15: Mix.Tasks.Compile.Comeonin.run/1
    (elixir) lib/enum.ex:977: anonymous fn/3 in Enum.map/2
    (elixir) lib/enum.ex:1261: Enum."-reduce/3-lists^foldl/2-0-"/3
    (elixir) lib/enum.ex:977: Enum.map/2
    (mix) lib/mix/tasks/compile.all.ex:15: Mix.Tasks.Compile.All.run/1
    (mix) lib/mix/tasks/compile.ex:64: Mix.Tasks.Compile.run/1
    (mix) lib/mix/tasks/deps.compile.ex:105: anonymous fn/2 in Mix.Tasks.Deps.Compile.do_mix/1

РЕДАКТИРОВАТЬ: После предложения Хосе Валима я установил Visual Studio Express, чтобы получить nmake. Мне также пришлось установить более свежую версию erlang + otp с сайта erlang. Наконец, я получаю другую, но все же связанную ошибку:

C:\Users\mesos_000\Desktop\elixir Projects\testeAddict>mix deps.compile comeonin
==> comeonin

Microsoft (R) Program Maintenance Utility Version 12.00.21005.1
Copyright (C) Microsoft Corporation.  All rights reserved.

'priv\bcrypt_nif.dll' is up-to-date

Compiled lib/comeonin/config.ex
Compiled lib/comeonin/pbkdf2_base64.ex
Compiled lib/comeonin/bcrypt_base64.ex
Compiled lib/comeonin/tools.ex
Compiled lib/comeonin.ex
Compiled lib/comeonin/password.ex
Compiled lib/comeonin/pbkdf2.ex

== Compilation error on file lib/comeonin/bcrypt.ex ==
** (MatchError) no match of right hand side value: {:error, :on_load_failure}
    (stdlib) erl_eval.erl:669: :erl_eval.do_apply/6

could not compile dependency comeonin, mix compile failed. You can recompile this dependency with `mix deps.compile comeonin` or update it with `mix deps.update comeonin`

Кроме того, установка erlang на мою виртуальную машину Ubuntu полностью решила проблему. Проблема осталась только в моей Windows 8.1.


person mesosteros    schedule 28.07.2015    source источник


Ответы (2)


Инструкции по устранению ошибки зависимости Comeonin были обновлены, и мне удалось решить эту проблему, выполнив то, что они сказали:

Откройте командную строку разработчика для Visual Studio (в Windows 8, 8.1 и 10 она находится в меню приложения Visual Studio).

$ cd "\Program Files (x86)\Microsoft Visual Studio 12.0\VC"
$ vcvarsall amd64

Зависимость comeonin теперь должна компилироваться.

person mesosteros    schedule 30.07.2015
comment
Я сделал это с Visual Studio Express 2015. Мне пришлось изменить установку, чтобы убедиться, что установлены инструменты C ++. Путь в этом случае был C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC - person Mitkins; 05.09.2016

Вам необходимо установить nmake. Цитата из другого ответа SO:

NMake является частью инструментов сборки Microsoft для создания проектов на C ++. Вы можете получить nmake, а также компилятор MSVC ++, загрузив Visual C ++ Express . Visual C ++ Express отлично работает в Windows 7.

Источник: https://superuser.com/questions/146577/where-do-i-find-nmake-for-windows-7

person José Valim    schedule 28.07.2015
comment
Я установил Visual Studio Express и Ultimate, и это не сработало. Я использую Windows 8.1. - person mesosteros; 28.07.2015
comment
Если вы запустите команду и наберете nmake, что вы получите? - person José Valim; 29.07.2015
comment
Я только что нашел его в своей папке Visual Studio в /VC/bin/nmake.exe, но запуск не устанавливает его. - person mesosteros; 29.07.2015
comment
Я получаю NMAKE : fatal error U1064: MAKEFILE not found and no target specified Stop. - person mesosteros; 29.07.2015
comment
протестировал его на моей виртуальной машине Ubuntu, и то же самое происходит для Linux, за исключением gcc. Но у меня установлен gcc. - person mesosteros; 29.07.2015