【问题标题】:How do I use Nitrogen as a GUI frontend for an Erlang app?如何使用 Nitrogen 作为 Erlang 应用程序的 GUI 前端?
【发布时间】:2011-08-22 19:58:13
【问题描述】:

我有一个基本的服务器端 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 连接到应用程序。

【问题讨论】:

    标签: erlang erlang-otp nitrogen


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      做什么:你看一下 Nitrogen quickstart.sh script,在它启动 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()。 您将在$NITROGEN/Quickstart/quickstart.sh 中找到的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。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-01-13
          • 2021-08-17
          • 2021-04-26
          • 2014-04-05
          • 2010-10-25
          • 2012-01-22
          • 1970-01-01
          相关资源
          最近更新 更多