2

我有一个基本的服务器端 Erlang 应用程序(还没有完全 OTP),我从命令行开始。我想把它变成一个交互式系统,使用浏览器作为带有 Nitrogen 的 GUI(版本 2.0.4)。总体计划是

  • 将当前模块变成 gen_server 作为 MODEL 部分;它分析数据并从中生成事件,这些事件反映了我感兴趣的数据的某些属性。
  • 添加一个 CONTROLLER 模块,它既是 gen_event(获取模型生成的事件)和 gen_server(允许来自 GUI 前端的查询)
  • 使用 Nitrogen 作为 VIEW,通过调用控制器模块(依次查询模型)使用 Ajax 工具更新相关页面

据我所知,我想要一个具有三个孩子的通用应用程序主管:模型、视图和控制器。然后他们将通过映射到 OTP 通信模式的 API 相互交谈。

这就是我卡住的地方:我应该把所有这些都放到 Nitrogen 目录树中吗?我是否应该设置一个新的应用程序目录结构并在其中包含三个组件(包括 Nitrogen)?作为我的应用程序主管的孩子,我究竟需要做什么来启动 Nitrogen 服务器(Nitrogen 启动脚本看起来比我预期的要复杂得多)?我已经开始学习Erlang 和 OTP in Action 了,但还没有完全完成。我需要在后天演示系统;)

我想要的是在命令行中输入“start.sh”,然后使用浏览器通过 Nitrogen 连接到应用程序。

4

3 回答 3

1

前段时间,我发现这篇关于在yaws网络服务器下使用 Nitrogen 作为库的博文。Yaws 具有许多底层特性(例如嵌入式模式),使其非常适合与 OTP 兼容的应用程序。

不是一个完整的答案,但我希望这些信息可能会有所帮助。

于 2011-05-11T11:51:08.957 回答
0

由于 Nitrogen 应用程序的构建方式,您不应构建与它紧密耦合的应用程序。相反,您构建您的应用程序,为 Nitrogen 提供 API(您将从 Nitrogen 事件中调用的 API 等)。

然后你将你的应用程序打包成一个 OTP 文件系统,把它放到氮气的应用程序文件夹中。当氮气制作或启动时ebin,只要它们在其应用程序目录中,它就会添加您的应用程序的路径。

例如:模型和控制器将在您的应用程序中实现。然后在您的应用程序中公开模块中的函数调用(可能是 gen_server 行为),您可以直接从氮页面调用这些函数调用。美妙之处在于所有这些都将在同一个代码路径中。

怎么做:你看一下 Nitrogenquickstart.sh 脚本,在它启动 erlang VM 的地方。

echo "在 Inets (http://localhost:8000) 上启动氮气..."
错误\
    -name YOUR_NODE_NAME_HERE \
    -pa ./ebin ../apps/*/ebin ../apps/*/include \
    -env ERL_FULLSWEEP_AFTER 10 \
    -eval“应用程序:开始(nprocreg)”\
    -eval“应用程序:启动(快速启动)”\
    -eval“应用程序:开始(YOUR_APPLICATION)”

如果您的应用程序不像 OTP,则创建一个名为“ebin”的文件夹,您将在其中放置您拥有的光束文件。创建一个名为:“my_app-1.0”的文件夹并将此 ebin 文件夹粘贴到该文件夹​​中

  氮气--|--/apps --|--/my_app-1.0 --|--/ebin
            |--/文档
            |--/rel
            |--/支持
            |--/快速入门

梁文件的完整路径应该是

“$NITROGEN/apps/my_app-1.0/ebin”
. 每当 Nitrogen 启动时,它都会将所有光束文件添加到代码路径中。然后,如果在你的代码中你有启动你的东西的函数说:main_server:start(). 您将quickstart.sh找到的内容更改为$NITROGEN/Quickstart/quickstart.sh以这种方式显示。

echo "在 Inets (http://localhost:8000) 上启动氮气..."
错误\
    -name YOUR_NODE_NAME_HERE \
    -pa ./ebin ../apps/*/ebin ../apps/*/include \
    -setcookie YOUR_FUNNY_COOKIE_HERE \
    -mnesia dir '"PATH/TO/MNESIA/DIRECTORY"'\
    -env ERL_FULLSWEEP_AFTER 10 \
    -eval“应用程序:开始(nprocreg)”\
    -eval“应用程序:启动(快速启动)”\
    -eval "main_server:start()"

这样做的好处是,如果您碰巧将视图更改为erlyweberlang web,则无需更改模型或控制器,而是公开可以从任何视图类型库调用的 API。

于 2011-05-17T09:52:52.357 回答
0

您可以尝试此博客文章中描述的步骤 http://rshestakov.wordpress.com/2012/12/30/how-to-install-nitrogen/

它解释了如何将 Nitrogen 作为依赖库添加到您的应用程序中

于 2013-01-13T13:27:18.350 回答