Mochiweb: включение и компиляция других библиотек

Мое приложение использует Mochiweb.

Я заметил, что файлы Mochiweb находятся в каталоге myapp/deps/mochiweb, и rebar компилирует их, когда я запускаю make в каталоге myapp.

Я хотел добавить ibrowse, чтобы написать несколько тестов, которые делают http-запросы к моему приложению. Поэтому я клонировал ibrowse из github в каталог myapp/deps/ibrowse.

Но, похоже, Erlang не знает, где взять файлы .beam для ibrowse и поэтому все мои тесты, использующие модуль ibrowse, проваливаются:

myapp
 ebin %%compiled tests reside here, tests which use ibrowse fail (badarg)
 deps
  mochiweb 
  ibrowse
   ebin %%compiled ibrowse module resides here
 src
 tests

Как заставить мое приложение на основе Mochiweb использовать другие внешние библиотеки Erlang/OTP?

Должен ли я редактировать rebar.config или Makefile для этого? Или, может быть, мне следует отредактировать файл _app.src?

Изменить: может быть, мне следует отредактировать список каталогов в файле myapp_sup.erl? (myapp_deps:local_path(["priv", "www"])

P.S. Как мое приложение узнает, где находятся все файлы mochiweb.beam? (например, универсальный myapp_web.erl использует вызов модуля mochiweb_http, но в каталоге myapp/ebin нет mochiweb_http.beam).


person skanatek    schedule 17.05.2012    source источник


Ответы (2)


Зависимости в арматуре добавляются через файл rebar.config:

%% What dependencies we have, dependencies can be of 3 forms, an application
%% name as an atom, eg. mochiweb, a name and a version (from the .app file), or
%% an application name, a version and the SCM details on how to fetch it (SCM
%% type, location and revision). Rebar currently supports git, hg, bzr and svn.
{deps, [application_name,
        {application_name, "1.0.*"},
        {application_name, "1.0.*",
         {git, "git://github.com/basho/rebar.git", {branch, "master"}}}]}.

Затем вы, вероятно, захотите взглянуть на релизы Erlang и обработку релизов с арматурой. Воспринимайте выпуск как способ группировать приложения.

http://www.erlang.org/doc/design_principles/release_handling.html

http://learnyousomeerlang.com/release-is-the-word

https://github.com/basho/rebar/wiki/Release-handling

person Roberto Aloi    schedule 18.05.2012

Добавление следующего кода в myapp_web.erl решило мою проблему:

ibrowse:start()

По умолчанию Mochiweb запускается в той же функции:

mochiweb_http:start()...

Я не уверен, что это правильный способ сделать это, но он работает.

person skanatek    schedule 18.05.2012