我有一个基本的服务器端Erlang应用程序(还没有完全OTP),我从命令行开始。我想把它变成一个交互式系统,使用浏览器作为带有氮气的GUI(版本2.0.4)。总体计划是
- 将当前模块转换为gen_server作为 MODEL 部分;它分析数据并从中生成事件,这些事件反映了我感兴趣的数据的某些属性。
- 添加一个 CONTROLLER 模块,该模块既gen_event(获取模型生成的事件)又gen_server(允许来自 GUI 前端的查询) 使用
- Nitrogen 作为 VIEW,通过调用控制器模块(进而查询模型)使用 Ajax 工具更新相关页面
据我所知,我想要一个有三个孩子的通用应用程序主管:模型、视图和控制器。然后,它们将通过映射到 OTP 通信模式的 API 相互通信。
这就是我卡住的地方:我应该把所有这些放到氮目录树中吗?我是否应该设置一个新的应用程序目录结构,并在其中包含三个组件(包括氮气)?作为应用程序主管的子级启动 Nitro 服务器,我究竟需要做什么(Nitro 启动脚本看起来比我预期的要复杂)?我已经开始在操作中学习 Erlang 和 OTP,但还没有完全完成。我需要在后天演示系统;)
我想要的是在命令行上键入"start.sh",然后使用浏览器通过 Nitrogen 连接到应用程序。
前段时间我发现了这篇关于在雅司病网络服务器下使用 Nitrogen 作为库的博客文章。Yaws 具有许多功能(例如嵌入式模式),使其非常适合符合 OTP 的应用程序。
不是一个完整的答案,但我希望这些信息可能会有所帮助。
由于 Nitrogen 应用程序的构建方式,您不应构建与其紧密耦合的应用程序。相反,您构建应用程序,向 Nitro 提供 API(您将从 Nitro 事件调用的 API,例如)。
然后,您将应用程序打包为OTP文件系统,将其放入氮气的应用程序文件夹中。当氮气生成或启动时,只要它们在其应用程序目录中,它就会添加应用程序的ebin
路径。
例如:模型和控制器将在您的应用程序中实现。然后在您的应用程序中,您在模块中公开函数调用(这可能gen_server行为),您可以直接从氮气页面调用这些调用。美妙之处在于所有这些都将在同一代码路径中。
该怎么做:你查看 Nitro quickstart.sh
脚本,在它启动 erlang VM 的位置。
echo "在 Inets 上启动氮气 (http://localhost:8000)..."呃\ - 名称 YOUR_NODE_NAME_HERE \ -pa ./ebin ../apps/*/ebin ../apps/*/include \ -环境 ERL_FULLSWEEP_AFTER 10 \ -eval "application:start(nprocreg)" \ -评估"应用程序:开始(快速入门)" \ -评估"应用程序:开始(YOUR_APPLICATION)"
如果您的应用程序不像 OTP,请创建一个名为"ebin"的文件夹,您将在其中放置您拥有的 Beam 文件。创建一个名为"my_app-1.0"的文件夹,并将此 ebin 文件夹粘贴到该文件夹中
氮气--|--/应用 --|--/my_app-1.0 --|--/ebin |--/文档 |--/rel |--/支持 |--/快速入门
光束文件的完整路径应为
"$NITROGEN/apps/my_app-1.0/ebin"。每当 Nitro 启动时,它都会将所有光束文件添加到代码路径中。然后,如果你的代码中有启动你的东西的函数,比如:
main_server:start()
。您将更改在$NITROGEN/Quickstart/quickstart.sh
中找到的quickstart.sh
,使其以这种方式显示。
echo "在 Inets 上启动氮气 (http://localhost:8000)..."呃\ - 名称 YOUR_NODE_NAME_HERE \ -pa ./ebin ../apps/*/ebin ../apps/*/include \ -设置饼干 YOUR_FUNNY_COOKIE_HERE \ -MNESIA DIR '"PATH/TO/MNESIA/DIRECTORY"' \ -环境 ERL_FULLSWEEP_AFTER 10 \ -eval "application:start(nprocreg)" \ -评估"应用程序:开始(快速入门)" \ -eval "main_server:start()"
这样做的好处是,如果你碰巧将你的视图更改为erlyweb,erlangweb,你将不需要对模型或控制器进行更改,而是公开可以从任何视图类型库调用的API。
您可以尝试此博客文章中描述的步骤http://rshestakov.wordpress.com/2012/12/30/how-to-install-nitrogen/
它解释了如何将 Nitrogen 作为依赖项库添加到您的应用程序中