Какой самый простой способ для начинающих установить модуль?
Я проверил rebar
, но это кажется слишком сложным. Может быть, кто-то может опубликовать что-то, что говорит, %Post your code here
в следующем приложении арматуры:
%%%-------------------------------------------------------------------
%% @doc myapp public API
%% @end
%%%-------------------------------------------------------------------
-module('myapp_app').
-behaviour(application).
%% Application callbacks
-export([start/2
,stop/1]).
%%====================================================================
%% API
%%====================================================================
start(_StartType, _StartArgs) ->
'myapp_sup':start_link().
%%--------------------------------------------------------------------
stop(_State) ->
ok.
Есть ли более простая альтернатива для начинающих?
6 ответов
Вы не можете избежать изучения системы сборки вашего языка, если собираетесь создавать что-то нетривиальное. Если вы знакомы с GNU Make, вы можете использовать http://erlang.mk/ вместо Rebar, но я считаю, что Rebar3 наиболее удобен для начинающих.
Чтобы решить конкретную проблему запуска чьего-либо библиотечного кода внутри REPL, попробуйте следующее с rebar3:
rebar3 новое приложение
Игнорируйте исходные файлы, которые он создает на данный момент. редактировать rebar.config
и добавить зависимости. Затем запустите REPL с загруженными этими зависимостями (вместе с любыми исходными файлами, которые вы создали в src/
каталог):
оболочка rebar3
Вот что я в итоге сделал:
$ git clone https://github.com/rebar/rebar3.git $ cd rebar3 .../rebar3$ ./bootstrap
Теперь у вас есть скрипт rebar3, и вы можете скопировать его куда-нибудь в $PATH, как описано в предыдущем разделе.
Или вы можете скачать .zip file
, разархивируйте его, затем перейдите в каталог rebar3 и выполните команду ./bootstrap
команда.
Это создает исполняемый файл rebar3
внутри /rebar3
каталог. Я переместил rebar3
исполняемый в /usr/local/bin
, который является каталогом, указанным в моей переменной окружения PATH (различные возможные местоположения PATH обсуждаются здесь):
.../rebar3$ sudo mv rebar3 /usr/local/bin
Это позволяет мне использовать команду rebar3 в любой строке. Как an alternative
После того, как вы создадите свое приложение (см. следующий шаг), вы можете скопировать rebar3 в каталог вашего приложения и из этой директории выполнить команду rebar, например:
$ ./rebar3 .....
Затем я создал новое приложение:
~/erlang_programs$ rebar3 new app myapp
(Замените название вашего приложения вместо: myapp)
Затем:
~/erlang_programs$ cd myapp
~/erlang_programs/myapp$
Для того, чтобы использовать jsx
, сторонняя библиотека JSON, я добавил jsx
как зависимость:
Зависимости перечислены в
rebar.config
файл под ключом deps:{erl_opts, [debug_info]}. {deps, [ {jsx, "2.8.0"} ]}.
rebar.config
проживает здесь:
~/erlang_programs/myapp$ ls
LICENSE _build rebar.lock
README.md rebar.config src
Затем я добавил свою программу erlang в myapp/src
каталог:
my_app / SRC /my.erl:
-module(my).
-export([test/0]).
test() ->
jsx:decode(<<"{\"data\": [1, 2, 3]}">>).
В заключение:
~/erlang_programs/myapp$ rebar3 shell
===> Verifying dependencies...
===> Fetching jsx ({pkg,<<"jsx">>,<<"2.8.0">>})
===> Version cached at /Users/7stud/.cache/rebar3/hex/default/packages/jsx-2.8.0.tar is up to date, reusing it
===> Compiling jsx
===> Compiling myapp
Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V6.4 (abort with ^G)
1> my:test().
[{<<"data">>,[1,2,3]}]
Если вы вносите изменения в свой файл.erl, в моем случае это файл my.erl, вам не нужно выходить из оболочки - просто скомпилируйте как обычно, например c(my)
,
Я начал изучать erlang в прошлом году, и мне было очень полезно познакомиться с erlang, написав код в простом блокноте на ваш выбор и сохранив его как myapp_app.erl. Затем я бы открыл консоль erlang и использовал команду compile, c
, чтобы скомпилировать мой модуль, который затем позволил бы мне вызывать мои функции.
> c(myapp_app).
> myapp_app:start(a,b).
Если вы хотите поэкспериментировать с Erlang, с каким-нибудь игрушечным приложением, чтобы овладеть языком, созданием процессов, связью и даже простым деревом контроля, вам на самом деле не нужно приложение, достаточно простой стандартной структуры каталогов otp и запустить функцию в,
С другой стороны, если вы намереваетесь создать приложение с зависимостями, если вы хотите создать библиотеку, релиз, управлять унитарным тестом и функциональным тестом... тогда rebar (и rebar3) сделают вашу жизнь намного проще.
Вы узнаете, как научиться понимать Erlang: Построение приложения с помощью OTP, а также следующие главы, чтобы понять, как определяется приложение или выпуск.
Эрланг будет искать модули в пути кода.
Вы можете увидеть путь к коду, вызвав code:get_path()
:
4> code:get_path().
[".","/usr/lib/erlang/lib/kernel-3.0.3/ebin",
"/usr/lib/erlang/lib/stdlib-2.2/ebin",
"/usr/lib/erlang/lib/xmerl-1.3.7/ebin",
...
...
Как видите, текущий каталог включен, и, вероятно, все остальное будет в каком-то месте установки системы по умолчанию. Для меня это означает, что все будет в "/usr/lib/erlang/lib", потому что именно там находится путь к библиотеке в Debian Linux, а остальная часть пути "APP-VERSION/ebin" раскрывается из пути к библиотеке (см. ниже)...
Путь к библиотеке можно увидеть, вызвав code:lib_dir()
:
5> code:lib_dir().
"/usr/lib/erlang/lib"
6>
Путь к библиотеке расширяется путем нахождения в ней всего, что выглядит как приложение, т. Е. Для каждой 'APP-VERSION/ebin', которая существует под ним, которая добавляется в путь к коду. Вот как генерируется путь к коду. И текущий каталог добавляется, конечно.
Модуль кода (стоит прочитать) имеет различные функции для изменения пути к коду, и есть переменные среды, такие как ERL_LIBS, которые позволяют вам добавлять больше путей, а аргумент -pa для erl также позволяет добавлять пути к коду.
Обратите внимание, что ERL_LIBS добавляет библиотеку, которая будет искать вхождения APP-VERSION/ebin, где as -pa добавляет путь к коду в том виде, в каком он есть.
Итак, когда вы все это знаете, самый простой способ установки модуля...
- Скопируйте скомпилированный файл луча в текущий каталог.
ХОРОШО! Это самое простое, но более подходящее решение, вероятно, подходит...
- Создайте несколько каталогов по пути к библиотеке (скажем, "my_app-1.0/ebin", так что это будет "/usr/lib/erlang/lib/my_app-1.0/ebin" в моей системе), и скопируйте в него файл луча,
Как только это будет сделано, запустите Erlang, и он должен добавить 'my_app-1.0/ebin' к пути кода, и все файлы лучей там должны быть найдены. Они установлены.
Обратите внимание, что "my_app-1.0" может быть чем угодно. Единственное соглашение гласит, что это должно быть имя приложения с тире и версия. Полезное соглашение, хотя.
Это просто установка модуля, который был вашим вопросом, но для полноты стоит упомянуть, что установка приложения может быть выполнена путем копирования файла .app также в путь к коду. Это так просто.
Для новичков, разве нет источника модуля в текущем каталоге (и компилирует их там) нормально и не слишком сложно? И это только маленький шаг к копированию файлов в системную папку. Обычно сторонние приложения, которые вы загружаете и компилируете, генерируют каталог ebin с файлом приложения и всеми файлами лучей, так что это просто вопрос копирования этого ebin в my_app-version/ebin...