我假设,您正在使用./init-dev.sh
. 此脚本提供自动重新加载,这在开发过程中非常棒,但可能会很慢。它检查所有.beam
文件,如果.erl
以后修改了相应的文件,则意味着必须重新编译它。每次请求都会重新编译。它实际上并没有创建新.beam
文件来代替以前的文件。它“即时”编译并加载它们,因此,即使您在第一次修改后没有更改任何内容,仍然需要重新编译文件。
如果您对大量文件进行了一些修改,此操作可能会对您的系统产生很大影响。它可能与 memcache 或 Cowboy 没有任何关系。只需定期编译文件。
几个技巧:
./rebar compile
可能会很慢,因为它会遍历所有依赖项,请尝试./rebar compile skip_deps=true
. 这要快得多!
- 如果你确实修改了 CB 文件并想编译它们,你仍然不必等待,试试
./rebar compile apps=your_app_name,boss
. 您必须编译所有使用该依赖项的应用程序,因此如果您修改了boss_db
,则必须调用:./rebar compile apps=your_app_name,boss,boss_db
。
- 您可以在生产环境中使用热代码重载。编译后调用
./init.sh reload
,但它不适用于 memcache!memcache 驱动程序不是正确的 OTP 应用程序,并且在热代码重新加载后,它不会得到更新。在使用旧代码的第二次热代码重新加载进程被清除后,与 memcache 的连接丢失。因此,如果您使用的是 memcache,请不要使用热代码重新加载。