makefile - Mochiweb: incluye y compila otras bibliotecas
erlang otp (2)
Mi aplicación usa Mochiweb.
Me di cuenta de que los archivos Mochiweb residen en el directorio myapp/deps/mochiweb
y la rebar
compila cuando ejecuto make en el directorio myapp
.
Quise agregar ibrowse
para escribir algunas pruebas que hacen solicitudes http a mi aplicación. Así que ibrowse
de github en el directorio myapp/deps/ibrowse
.
Pero parece que Erlang no sabe dónde obtener los archivos ibrowse
para el ibrowse
y, por lo tanto, todas mis pruebas que usan el módulo de ibrowse
fallan:
myapp
ebin %%compiled tests reside here, tests which use ibrowse fail (badarg)
deps
mochiweb
ibrowse
ebin %%compiled ibrowse module resides here
src
tests
¿Cómo puedo hacer que mi aplicación basada en Mochiweb use otras bibliotecas externas de Erlang / OTP?
¿Debo editar rebar.config o Makefile para eso? O tal vez debería editar un archivo _app.src?
Editar: ¿Tal vez debería editar la lista de directorios en el archivo myapp_sup.erl? ( myapp_deps:local_path(["priv", "www"]
)
PD: ¿Cómo sabe mi aplicación dónde residen todos los archivos mochiweb.beam? (por ejemplo, el myapp_web.erl
genérico utiliza una llamada al módulo mochiweb_http
, pero no hay mochiweb_http.beam
en el directorio myapp/ebin
).
Agregar el siguiente código a myapp_web.erl resolvió mi problema:
ibrowse:start()
Por defecto, Mochiweb se inicia en la misma función:
mochiweb_http:start()...
No estoy seguro de si es la forma correcta de hacerlo, pero funciona.
Las dependencias en la barra de refuerzo se agregan a través del archivo 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"}}}]}.
Entonces, es probable que desee ver las versiones de Erlang y el manejo de versiones con barras de refuerzo. Piense en un lanzamiento como una forma de agrupar aplicaciones.
http://www.erlang.org/doc/design_principles/release_handling.html