加快 Erlang 编辑、编译、运行/调试周期
编辑 Erlang 应用程序、编译代码并查看运行结果的最快方法是什么?最好在最后一步跳入 Erlang shell。
我当前的新手设置:
- 编译应用程序并启动 erl shell 的脚本。
- 然后我输入 application:start(foo)。
- 当我修复拼写错误时,我使用 c('module') 重新编译模块并重新启动应用程序。
有更快的方法吗?顺便提一句。我选择的编辑器是 Emacs。
What is the fastest way to edit an Erlang application, compile the code and see the running result? Preferably jumping in the Erlang shell on the last step.
My current newbie setup:
- A script that compiles the app and starts up the erl shell.
- Then I type in application:start(foo).
- When I fix a typo I recompile the module with c('module') and restart the app.
Is there a faster way? BTW. my editor of choice is Emacs.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这是我的设置:
make
即可开始编译。l()
一次性加载所有更改的模块。您可以在这里找到这个宏和其他一些有用的宏: http://www.snookles.com/erlang/ user_default.erl很少需要重新启动整个 Erlang 应用程序。重新加载更改的模块是一种更常见的用例,通常足以应用您的更改。
关于应用程序启动:如果您的应用程序依赖于其他应用程序,则 application:start() 将失败,直到您启动所有依赖项。因此,编写辅助函数
:start()
是很常见的。这是一个示例。另一个有用的函数是:stop()
。应用所有这些技术后,工作流程将如下所示:
l()
。Here's my setup:
make
in the source directory.l()
in Erlang shell. You can find this and some other useful macros here: http://www.snookles.com/erlang/user_default.erlThere's rarely a need to restart the whole Erlang application. Reloading changed modules is a more common use-case and it is usually enough to apply your changes.
Regarding application start: if your application depends on other applications, application:start() will fail, until you start all the dependencies. Because of that, it is common to write a helper function
<your-app-name>:start()
. Here's an example. Another useful function is<your-app-name>:stop()
.With all these techniques applied, a workflow would look like this:
<your-app-name>:start().
l()
in your Erlang shell.<your-app-name>:stop(), <your-app-name>:start().
您可以将 rebar 视为构建工具。
make:all/0
和整个 make 模块也可以提供帮助。要从 shell 显式重新加载模块,您可以使用l(Module)
。最后,您可能还对创建一个 Erlang release 来“包装”所有内容感兴趣你的 Erlang 应用程序。You might look at rebar as a building tool.
make:all/0
and the whole make module could help as well. To explicitly reload a module from the shell you can usel(Module)
. Finally, you might also be interested in creating an Erlang release to "wrap" all your Erlang applications.编辑和编译是由我使用的IDE(Eclispe with erlide)完成的。
我还创建了一个脚本来启动虚拟机我的应用程序和有用的工具。该脚本仅用于开发时间。
为了重新加载更改的源代码然后编译 bin,我使用 mochiweb 的重新加载器。重新加载器会观察 bin 目录,如果有变化,它会加载模块并运行 eunit 测试(如果内部有一些变化)。
示例:
erl +A 5 +K true -name @127.0.0.1 -pa $PWD/ebin $PWD/test $PWD/deps/*/ebin -boot start_sasl -s reloader -s 工具栏 -s
editing and compiling is done by the IDE (Eclispe with erlide) which i use.
I also created a script which starts the vm my application and helpful tools. The script is only used for dev time.
For reloading the changed sources and then compiled bins, i use the reloader from mochiweb. The reloader observes the bin dir and if there are changes, it loads the moduls and runs the eunit tests, if you have some inside.
Example:
erl +A 5 +K true -name @127.0.0.1 -pa $PWD/ebin $PWD/test $PWD/deps/*/ebin -boot start_sasl -s reloader -s toolbar -s
您还可以尝试 erlbuild。 Erlbuild 是一个简单的应用程序,它在 src 目录中查找更改的源文件,如果找到一些文件,则会再次编译并加载模块。加载模块后,erlbuild 运行模块的测试。
您可以在以下位置找到该项目: https://github.com/ulfa/erlbuild
~Ulf
what you can also try is erlbuild. Erlbuild is an simple application which looks in src directory for changed source files and if it finds some files, than it compiles and load the modules again. After loading the modules, erlbuild runs the the tests of the modules.
You can find the project under : https://github.com/ulfa/erlbuild
~Ulf