我有一个基本的服务器端Erlang应用程序(还没有完全OTP)我从命令行开始。我想把它变成一个交互式系统,使用浏览器作为GUI与氮气(版本2.0.4)。总体计划是
据我所知,我想要一个有三个孩子的普通应用程序主管:模型,视图和控制器。然后,他们将通过映射到OTP通信模式的API相互通信。
这就是我被困住的地方:我应该把所有这些都放到氮目录树中吗?我应该设置一个新的app目录结构,并在那里有三个组件(包括氮气)?作为我的应用程序主管的孩子,我究竟需要做些什么才能启动氮服务器(氮启动脚本看起来比我预期的要复杂得多)?我已经开始浏览 Erlang和OTP in Action ,但尚未完成它。我需要在后天演示系统;)
我想要的是在命令行上键入“start.sh”,然后使用浏览器通过Nitrogen连接到应用程序。
答案 0 :(得分:1)
前段时间我发现这个blog post关于在yaws网络服务器下使用氮气作为库。 Yaws具有很多功能(例如嵌入式模式),非常适合符合OTP标准的应用程序。
不是一个完整的答案,但我希望可能有用的信息。
答案 1 :(得分:0)
由于氮气应用程序的构建方式,您不应该将应用程序紧密耦合到它上面。相反,您构建应用程序,为氮气提供API(您将从您的氮气事件e.t.c调用的API)。
然后,您将应用程序打包为OTP文件系统,将其放入氮气的apps文件夹中。当氮气生成或启动时,只要它们位于应用目录中,它就会添加应用的ebin
路径。
例如:模型和控制器将在您的应用程序中实现。然后在您的应用程序中,您将在模块中显示函数调用(可能是gen_server行为),您可以从氮页面调用它。美丽就是所有这些将在相同的代码路径中。
怎么做:你看看氮quickstart.sh
脚本,它启动了erlang VM。
echo "Starting Nitrogen on Inets (http://localhost:8000)..." erl \ -name YOUR_NODE_NAME_HERE \ -pa ./ebin ../apps/*/ebin ../apps/*/include \ -env ERL_FULLSWEEP_AFTER 10 \ -eval "application:start(nprocreg)" \ -eval "application:start(quickstart)" \ -eval "application:start(YOUR_APPLICATION)"
如果您的应用程序不是OTP,那么创建一个名为“ebin”的文件夹,在其中放置您拥有的光束文件。创建一个名为“my_app-1.0”的文件夹并将该ebin文件夹粘贴到该文件夹中< / p>
Nitrogen--|--/apps --|--/my_app-1.0 --|--/ebin |--/doc |--/rel |--/support |--/Quickstart
光束文件的完整路径应为
"$NITROGEN/apps/my_app-1.0/ebin"。 只要氮气启动,它就会将所有光束文件添加到代码路径中。然后,如果在您的代码中,您具有启动您的内容的功能,请说:
main_server:start()
。
您将更改quickstart.sh
中找到的$NITROGEN/Quickstart/quickstart.sh
以此方式显示。
echo "Starting Nitrogen on Inets (http://localhost:8000)..." erl \ -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 "application:start(nprocreg)" \ -eval "application:start(quickstart)" \ -eval "main_server:start()"
这样做的好处是,如果您碰巧将视图更改为 erlyweb , erlang web ,则无需制作更改模型或控制器,而是暴露可以从任何视图类型库调用的API。
答案 2 :(得分:0)
您可以尝试本博文中描述的步骤 http://rshestakov.wordpress.com/2012/12/30/how-to-install-nitrogen/
它解释了如何将氮作为依赖库添加到您的应用程序