Nitrogen自学笔记.docx
《Nitrogen自学笔记.docx》由会员分享,可在线阅读,更多相关《Nitrogen自学笔记.docx(12页珍藏版)》请在冰豆网上搜索。
Nitrogen自学笔记
Nitrogen自学笔记I:
:
简介
2009-12-14下午10:
37
Nitrogen是什么?
一个Erlang的WebFramework,可以建筑在Inets/Mochiweb/Yaws上的。
有什么特别?
可以很简单的实现RealTime的网站,ServerPush/Comet、分布式程序、高并发程序。
。
。
简单来说,我们可以很“容易”的实现,高并发的Comet应用。
。
。
比如一个
一个Mochiweb的应用
Wiki:
官网:
Nitrogen自学笔记II:
:
nterviewwithRustyKlophausontheNitrogenErlangWebFramework
2009-12-14下午10:
45
HiDavidw,Thanksforyourinterestandquestions.Fornow,NitrogenisprimarilyaimingtobringErlanguptoparwithotherlanguagesforcreatingdynamic,Ajax-ifiedWeb2.0applications.
"WhatdoesitreallydothattakesadvantageofErlang?
"
Thebigadvantageisthat,withNitrogen,youcandevelopyourentireWeb2.0applicationinErlang.BeforeNitrogen,mostpeopledidthefrontendinRailsandthebackendinErlang,andusedabridge,suchasApacheThrift,togetthemtalking.OnceyourwebappisinErlang,youcan:
*RunonMochiweborYaws,bothextremelyperformanthttpservers.
*Distributeyourwebserveracrossmultiplenodeswithoutworryingaboutstickysessions.
*ReapalloftheotherErlanggoodness,suchashotcodeswapping,builtinapplicationmonitoringandrestarting,anextremelystableenvironment,etc.
(AllofthestuffthatmadeAmazonuseErlangforSimpleDBandFacebookuseErlangforFacebookChat.)
"WhatabouttheDBlayer?
"
Mnesia,Erlang'sbuiltindatabase,actuallydoesthejobquitewell.LanguagestendtoaddaDBlayertoeasethepainofjumpingintoandoutofSQL,andwe'resousedtothisthatweexpecttohavetodothesameinanylanguage.Butinthiscase,MnesiathinksinErlangsyntax,sothereisreallynoneedtowrapitinanything.Plus,Mnesiaworksreallywellfordocumentswithchangingschemas,whichisveryWeb2.0.Ifyou'dratheravoidMnesiaanduseSQL,thenErlyDBisyourbestoption.
Nitrogen自学笔记II:
:
如何传递Data给Template
2009-12-15下午10:
57
-----File:
web_blog.erl-----
-module(web_blog).
-include("wf.inc"). //IncludeNitrogenElements,
-compile(export_all).
main()->#template{file="./wwwroot/one2column.html"}. //RenderHTMLbypassingData
title()->"NitrogenReferenceEric". //ForHTMLtemplate; canbecalledlike[[[page:
title()]]]intemplate
headline()->"NitrogenReferenceOverview".
body()->[
"
ElementsEric!!
!
ElementsarethebuildingblocksofaNitrogenpage.Theyletyouspecify
apagetemplate,divs,spans,textboxes,andbuttonsusingasimplesyntaxbasedon
Erlangrecords.
Actions
Actionsletyoumakeapagedynamic.Useactionstowireupclickormouseover
events,applyJQueryeffects,showorhideelements,anddisplayalerts.
Validators
Validatorshelpyoucheckthatthedataauserenteredisvalid.Checkfor
requiredfields,integervalues,emails,andothers,oraddyourown
customvalidators.
"
].
Nitrogen自学笔记III:
:
定义Function
2009-12-15下午11:
09
Nitrogen根本还是Erlang,所以定义一个Function/Module必然要遵循基本的语法,这里不多说了。
但是,Nitrogen毕竟是一个Framework,他有自己的语法、自己的封装。
为了更便于理解和学习,我们在定义一个Module的时候,需要遵循一个简单的原则:
如我们将要实现一个URL例如:
那么我们的Module的目录结构及命名应为:
-blog
--view
---blog_view_all.erl
Nitrogen自学笔记4:
:
Template中调用Module
2009-12-16下午09:
18
普通情况,我们在Template当中,都是应用[[[page:
body()]]]的方法借助page这个MasterModule来传递参数,但是,当有需要调用另外的Module来进行处理,或者可以复用的模块,则可以采用:
[[[another_module:
render()]]]的方法,书写一个another_module.erl来进一步处理。
。
。
如可以在这个新的Module下面定义:
#button{id=btn,text=“DoDomthing”,postback=do_something}
Nitrogen自学笔记5:
:
Nitrogen链接CouchDB
2009-12-23下午11:
06
Nitrogen没有自己的数据库方法,我们可以引用第三方的API链接CouchDB,我采用erlang-couchDB,从这里可以找到转帖的原文
首先,启动Mochiweb+Nitrogen
-----start.sh-----
#!
/bin/sh
exportNITROGEN_SRC=..
exportCOUCHDB_SRC=../erlang_couchdb
exportMOCHIWEB_SRC=../mochiweb
cd`dirname$0`
if[[-d$MOCHIWEB_SRC]];then
echo"UsingMochiwebindirectory$MOCHIWEB_SRC."
else
echo
echo"Update\$MOCHIWEB_SRCtopointtoyourMochiwebdirectory."
echo"Exiting..."
echo
exit1
fi
echoCreatinglinktoNitrogensupportfiles...
rm-rfwwwroot/nitrogen
ln-s../$NITROGEN_SRC/wwwwwwroot/nitrogen
echoStartingNitrogenonMochiweb...
execerl\
-namenitrogen@127.0.0.1\
-pa$PWD/apps$PWD/ebin$PWD/include\
-pa$COUCHDB_SRC/ebin$COUCHDB_SRC/include\
-pa$NITROGEN_SRC/ebin$NITROGEN_SRC/include\
-pa$MOCHIWEB_SRC/ebin$MOCHIWEB_SRC/include\
-smakeall\
-sreloader\
-eval"application:
start(nitrofront)"
然后,很简单的应用这个API
-----web_create.erl-----
-module(web_create).
-include_lib("../include/wf.inc").
-compile(export_all).
main()->#template{file="./wwwroot/onecolumn.html",bindings=[
{'Group',index},
{'Item',create}
]}.
title()->"createanewmapping".
headline()->"Mapanewpathtoadestination".
body()->[
#link{class=tiny,text="backtolist",url="/web/index"},
#p{},
#label{text="Path:
"},
#textbox{id=path,text="/new/path"},
#label{text="Destination:
"},
#textbox{id=dest,text="http:
//new.destinati.on/"},
#p{},
#button{text="save",postback=button_pressed}
].
event(button_pressed)->
Path=wf:
q(path),
Dest=wf:
q(dest),
links:
create_mapping(Path,Dest),
wf:
flash(wf:
f("recordsaved:
~s->~s",[Path,Dest]));
event(_)->ok.
-----links.erl-----
-module(links).
-compile(export_all).
get_all()->
{json,{struct,Props}}=erlang_couchdb:
invoke_view({"127.0.0.1",5984},"umleitung","redir","match",[{"key","\"/\""}]),
try proplists:
get_value(<<"rows">>,Props)of
[{struct,Row}|_]->
[proplists:
get_value(<<"key">>,Row),proplists:
get_value(<<"value">>,Row)];
_->{error,unknown}
catch
_:
_->{error,unknown}
end.
create_mapping(Path,Dest)->
Doc=[
{<<"type">>,<<"redir">>},
{<<"path">>,list_to_binary(Path)},
{<<"destination">>,list_to_binary(Dest)}
],
erlang_couchdb:
create_document({"127.0.0.1",5984},"umleitung",Doc).
Nitrogen自学笔记6:
:
安装NitrogenonMochiweb
2009-12-26下午01:
30
在官网上有一个教程,但是我发现还是有些不太清楚,不太适合我这种小白。
。
。
以下是我的配置过程
1.下载Mochiweb、Nitrogen,这个就不用多嘴了
2.我这样部署我的目录结构:
g是我的源码,所有Nitrogen/Mochiweb/erlang-CouchDB/...都在放nitrogen下面
3.使用Nitrogen自带的命令行来创立一个project
4.这样在g文件夹下面就会产生默认的文件
5.下面我们需要编辑一下start.sh
6.还有一步,这个是我感觉不太方便的地方,也许我还没有搞明白正确的地方来编译。
。
。
一下是我的小技巧
7.使用文本编辑器,编辑g.app,如果有大牛了解如何编译生成这个配置文件,请赐教~~~
8.最后我们需要编辑一下我们的web_index.erl文件,这个是nitrogen默认启动后会查找的文件,简单来说,就是修改正确的Lib目录
9.OK了,运行./start.sh时候可以看到如下的页面
剩下的就是我们自己去创造我们自己的代码了~~~:
-D
Nitrogen自学笔记7:
:
NitrogenwithPostgreSQL
2010-01-10下午08:
01
要实现Erlang和MySQL或者PostgreSQL并没有想象的容易。
。
。
对于,MySQL来说找了2个方法,
1. eralng-mysql, 始终无法正确链接数据库。
。
。
2. mysql-odbc mysql-odbc不支持Mac-10.6,所以放弃。
。
。
然后回到PostgreSQL上来吧。
。
。
1.获得一个Erlang-PostgreSQL的copy hgclone
2.保证在我们开始nitrogen的时候,加载erlang-postgre
3.我们自己的DBlayer
4.这样就可以了,其他的我们就可以慢慢书写了。
。
Nitrogen自学笔记8:
:
Erlang和Key-Value数据库
2010-01-10下午08:
13
最近一直对Key-Value类型的数据库一直很感兴趣。
。
。
感觉更能体现Erlang的分布式、高并发、高可用的特性。
。
。
但是,对于一个类似我这样都初学者,直接用这样的“新型”数据库,还真是很。
。
。
我就写写我的自我感觉吧。
。
。
1.首先进入眼帘的数据库是CouchDB,名气似乎最大,但是看了很多评论,比如Last.fm的CTO的这篇文章,还是很有启迪意义的
2.进而我又看了scalaris,很有意思,很奇特的设计,但是似乎不存在物理文件的感觉很不安全。
。
。
3.又看了国人写的这个
4.。
。
。
总之看了很多,试用了几个,都是很特别的。
。
。
但是,对于初学者来说,真得用起来非一朝一夕可以体会真谛的,我的意思是如果没有几个机器的互相策应,根本无法体会其中最有意思的地方。
。
。
也许,某一天有机会了,真得可以去真正部署一下。
。
。
Nitrogen自学笔记9:
:
Nitrogen收集教程-ing
2010-01-11上午09:
35
比较详细的教程
Nitrogen自学笔记10:
:
Comet应用
2010-01-11下午11:
19
Comet就不多说了,这里有一篇很好的文章介绍。
应用Nitrogen来实现Comet非常简单。
wf:
comet(fun()->YOUR_FUNCTION()end)
我认为Nitrogen就是应用了基于AJAX的长轮询(long-polling)的方式,由jQuery响应服务器发过来的更新,通过wf:
update来进行页面的更新,当更新结束后在发送请求给服务器,等待下次服务器给它更新。