私はCowboyとSyncでErlang.mkを使用してアプリケーションを構築しています。再コンパイルはfragments_app
(フラグメントは私のプロジェクトの名前です)を除き、ほとんどのモジュールでうまく動作します。私はそこに、ルーティングの構成を有していると私はそれを変更する場合(例えば、新しいルートを追加)私は再コンパイルされたモジュールについての通知を取得しています:アプリケーションモジュールをリロードすると、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.)
が、変更が適用されていないようです:
$ http :8080/fragments
HTTP/1.1 404 Not Found
content-length: 0
date: Fri, 14 Apr 2017 19:35:27 GMT
server: Cowboy
またコンソール
c:l(fragments_app).
でモジュールをリロードすると、どちらも
を実行していない、助けませんアプリケーションを停止してもう一度起動すると、正常に動作します。
同時にハンドラを更新するとすぐに効果が発揮されるように見えます - 同期はそれを取り上げて、アプリケーションを再起動せずに効果が発生します。ここで
は、変更後のfragments_app.erl
の源である:
-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.
私の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
と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}.
ですが、なぜでしょうか?アプリを再起動せずに変更を適用するためにできることは何ですか?
一部(継続中)の議論は、ここを参照してくださいシーケンスを呼び出す必要があるので、あなたは、それが実行され、それを呼び出して、確認する必要があります/ lhoguin/status/852986294896664576 –