Je construis une application utilisant Erlang.mk avec Cowboy et Sync. La recompilation fonctionne très bien pour la plupart des modules, à l'exception de fragments_app
(fragments est le nom de mon projet). J'ai une configuration de routage là et quand je le change (par exemple, ajouter une nouvelle voie) Je reçois une notification de module étant recompilé:Le module d'application de rechargement ne prend pas effet dans l'application basée sur erlang.mk
=INFO REPORT==== 14-Apr-2017::19:56:59 ===
/app/src/fragments_app.erl:0: Recompiled.
=INFO REPORT==== 14-Apr-2017::19:56:59 ===
fragments_app: Reloaded! (Beam changed.)
mais le changement ne semble pas être appliquée:
$ http :8080/fragments
HTTP/1.1 404 Not Found
content-length: 0
date: Fri, 14 Apr 2017 19:35:27 GMT
server: Cowboy
Module rechargeant également dans la console
c:l(fragments_app).
ne fonctionne pas, ni exécuter
sync:go().
Si j'arrête l'application et la redémarre, cela fonctionne comme prévu. En même temps, les gestionnaires de mise à jour semblent prendre effet immédiatement - la synchronisation est en cours et l'effet se produit sans redémarrer l'application.
Voici la source de fragments_app.erl
après le changement:
-module(fragments_app).
-behaviour(application).
-export([start/2]).
-export([stop/1]).
start(_Type, _Args) ->
Dispatch = cowboy_router:compile([
{ '_', [
{ "/fragments", fragments_http_handler, [] }
]}
]),
{ ok, _ } = cowboy:start_clear(fragments_http_listener, 100,
[{ port, 8080 }],
#{ env => #{ dispatch => Dispatch }}
),
fragments_sup:start_link().
stop(_State) ->
ok.
Mon Makefile:
PROJECT = fragments
PROJECT_DESCRIPTION = New project
PROJECT_VERSION = 0.1.0
DEPS = cowboy sync
dep_cowboy_commit = master
DEP_PLUGINS = cowboy
SP = 2
include erlang.mk
et relx.config:
{release, {fragments_release, "1"}, [fragments, sasl, runtime_tools]}.
{extended_start_script, true}.
{sys_config, "rel/sys.config"}.
{vm_args, "rel/vm.args"}.
{dev_mode, true}.
Pourquoi est-ce qui se passe? Tout ce que je peux faire pour appliquer mes modifications sans redémarrer l'application?
Voir ici pour une discussion (en cours): https://twitter.com/lhoguin/status/852986294896664576 –