Оценить команду Elixir из командной строки — модуль недоступен

Я обнаружил, что если я сделаю следующее, все будет работать так, как ожидалось:

$ iex --sname console --remsh eprocess@service
eprocess@service)1> MyModule.process()

Однако MyModule недоступен, если я попытаюсь:

$ iex --sname console --remsh eprocess@$HOSTNAME -e "MyModule.process()"

Ошибка:

** (UndefinedFunctionError) функция MyModule.process/0 не определена (модуль MyModule недоступен)

Кто-нибудь знает, как включить зависимости от микса при использовании флага -e?


person Olshansk    schedule 20.03.2018    source источник
comment
Вы можете попробовать добавить псевдоним в выражение для оценки, например так: -e "(alias MyModule; MyModule.process())" Обратите внимание, что из-за того, как оцениваются несколько выражений, вам нужно добавить круглые скобки вокруг выражения.   -  person Onorio Catenacci    schedule 21.03.2018
comment
Неудачно. Та же ошибка сохраняется.   -  person Olshansk    schedule 21.03.2018
comment
Параметр -S указывает сценарий для запуска. У вас должна быть возможность создать сценарий, например runmyprocess.exs, а затем добавить -S runmyprocess в конец вашей командной строки.   -  person Onorio Catenacci    schedule 21.03.2018
comment
Та же проблема. Я не думаю, что модули моего приложения загружаются в iex, когда оцениваются параметры -e или -S.   -  person Olshansk    schedule 23.03.2018
comment
@OnorioCatenacci Мне удалось решить проблему импорта, написав скрипт, который добавляет -pa */ebin для каждой имеющейся у меня зависимости. Однако вызов, который я хочу сделать, зависит от БД, поэтому он говорит, что репо не запущено. Я вручную вызываю Mix.Ecto.ensure_started(Repo), но теперь пишет, что конфиги не указаны. Я действительно не знаю, что делать...   -  person Olshansk    schedule 24.03.2018
comment
На самом деле, вот кое-что интересное: iex --sname console --remsh eprocess@$HOSTNAME -e "IO.inspect(Application.get_env(:a, :b))" -> результат: nil iex --sname console --remsh eprocess@$HOSTNAME iex> IO.inspect(Application.get_env(:a, :b) -> результат: не nil Похоже, команда, которую мы передаем -e, не имеет доступа к контексту приложения, но оболочка, которая запускается после этого, имеет доступ.   -  person Olshansk    schedule 24.03.2018