Какой самый простой способ для начинающих установить модуль?

Я проверил 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

Я не думаю, что есть более простой способ. Изучение арматуры выглядит логичным шагом здесь. Я также думаю, что много усилий было приложено к арматуре и арматуре3, чтобы сделать Эрланга более привлекательным для новичков.

Вот что я в итоге сделал:

Установите 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...

Другие вопросы по тегам