如何使用 Nitro 作为 Erlang 应用程序的 GUI 前端



我有一个基本的服务器端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 作为依赖项库添加到您的应用程序中

最新更新