1. 到 http://www.erlang.org/download.html 下载 erlang,当前的最新版本是
R13A, 下载后按提示安装,建议不要安装到有空格的路径,免得导致不必要的路径
问题,比如我的安装路径是 d:\programs\erl5.7,把 man 文档解压后,复制 man
子目录到上述安装路径下, 以下是具体要下载的文件:
http://www.erlang.org/download/otp_win32_R13A.exe (安装程序)
http://www.erlang.org/download/otp_doc_man_R13A.tar.gz (man 文档)
2. 配置 Emacs, 把下面这段内容加入你的 Emacs 配置文件
;; erlang
(add-to-list 'load-path "d:/programs/erl5.7/lib/tools-2.6.3/emacs")
(setq erlang-root-dir "d:/programs/erl5.7")
(add-to-list 'exec-path "d:/programs/erl5.7/bin")
(require 'erlang-start)
;; erlang manual
(require 'woman)
(add-to-list 'woman-manpath "d:/programs/erl5.7/man")
3. 到 http://www.mingw.org/ 下载 MinGW, 安装后就可以使用make来编译程序
4. 安装 subversion for windows, 这样可以用 svn 来 checkout 出来 MochiWeb 的源码
5. 设置环境变量 PATH,加入如下路径
d:\programs\MinGW\bin
d:\programs\erl5.7\bin
d:\programs\GnuWin32\bin
d:\Programs\Subversion\bin
6. 到 http://downloads.sourceforge.net/gnuwin32/which-2.20-setup.exe 下载
which for windows,然后查看相关程序是否能正确找到
which -a which svn make erl escript
d:\programs\GnuWin32\bin\which.EXE
d:\Programs\Subversion\bin\svn.EXE
d:\programs\MinGW\bin\make.EXE
d:\programs\erl5.7\bin\erl.EXE
d:\programs\erl5.7\bin\escript.EXE
7. 获得 MochiWeb 的源码,比如我把它放在 d:/devel/erlang/mochiweb
cd d:/devel/erlang
svn co http://mochiweb.googlecode.com/svn/trunk/ mochiweb
8. 编译 MochiWeb 的源码
cd d:/devel/erlang/mochiweb
make
到此为止,如果一切正常的话,你已经有了一个完整的 erlang 环境,和一份已经
编译好的 MochiWeb。下一部分主要说明如何用 MochiWeb 来开发你自己的应用。
下面来说明怎么使用 MochiWeb 来开发自己的应用。
1. 由于 windows 不支持类似 Unix-like 系统的 symlink,所以需要一个叫做
Junction 的工具。到下面链接下载,解压,拷贝 junction.exe 到
c:/WINDOWS/system32 目录下。
http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx
which -a junction
c:\WINDOWS\system32\junction.EXE
2. 修改 mochiweb 源码中的 mochiweb_skel.erl文件,当开发一个新的应用时,可以
用它来生产代码骨架,但是由于 windows 上不支持 symlink,所以需要进行如下
修改
svn diff d:/devel/erlang/mochiweb
Index: D:/devel/erlang/mochiweb/src/mochiweb_skel.erl
===================================================================
--- D:/devel/erlang/mochiweb/src/mochiweb_skel.erl (修订版 97)
+++ D:/devel/erlang/mochiweb/src/mochiweb_skel.erl (工作拷贝)
@@ -14,9 +14,14 @@
N + 1
end,
skelcopy(src(), DestDir, Name, LDst),
- ok = file:make_symlink(
- filename:join(filename:dirname(code:which(?MODULE)), ".."),
- filename:join([DestDir, Name, "deps", "mochiweb-src"])).
+ ok = io:format("[~p] -> [~p]~n",
+ [
+ filename:join(filename:dirname(code:which(?MODULE)), ".."),
+ filename:join([DestDir, Name, "deps", "mochiweb-src"])
+ ]).
%% Internal API
3. 保存,编译
cd d:/devel/erlang/mochiweb
make
4. 用 new_mochiweb.erl 生产代码骨架, 用法如下:
escript new_mochiweb.erl name [destdir]
这里应用的名称是 myapp,路径为 d:/devel/erlang/myapp
cd d:/devel/erlang/mochiweb
escript scripts/new_mochiweb.erl myapp d:/devel/erlang/.
输出如下:
./myapp/
./myapp/support/
include.mk
start.sh
start-dev.sh
./myapp/src/
skel_web.erl
skel_sup.erl
skel_deps.erl
skel_app.erl
skel.hrl
skel.erl
skel.app
Makefile
./myapp/priv/
./myapp/priv/www/
index.html
Makefile
./myapp/include/
./myapp/ebin/
./myapp/doc/
./myapp/deps/
["d:/devel/erlang/mochiweb/scripts/../ebin/.."] -> ["d:/devel/erlang/myapp/deps/mochiweb-src"]
5. 输出的最后一行就是需要建立的 symlink,我们用 junction 来建立,命令如下
junction d:/devel/erlang/myapp/deps/mochiweb-src d:/devel/erlang/mochiweb
6. 编译我们的应用
cd d:/devel/erlang/myapp
make
7. 建立 start.bat 和 start-dev.bat
start.bat 的内容
@echo off
set MOCHIWEB_IP=127.0.0.1
start d:\programs\erl5.7\bin\werl.exe +A 16 -pa d:\devel\erlang\myapp\ebin d:\devel\erlang\myapp\deps\mochiweb-src\ebin -boot start_sasl -s myapp
start-dev.bat 的内容
@echo off
set MOCHIWEB_IP=127.0.0.1
start d:\programs\erl5.7\bin\werl.exe +A 16 -pa d:\devel\erlang\myapp\ebin d:\devel\erlang\myapp\deps\mochiweb-src\ebin -boot start_sasl -s reloader -s myapp
这两个 .bat 文件的区别为后者比前者多了 -s reloader,该选项的作用是当应用
的 .beam 文件发生改变时,自动 load 最新的 .beam 文件,在应用开发过程中非
常方便
8. 运行上述 bat 脚本中的任意一个,这时候我们的应用就起来了,默认是监听在
8000 端口,你可以修改 d:/devel/erlang/myapp/src/myapp_sup.erl 中的
{port, 8000} 到 你想要监听的端口,上述两个 bat 文件中的 set MOCHIWEB_IP=127.0.0.1
就是用来指定监听的 ip 地址
9. 在浏览器中输入地址 http://127.0.0.1:8000/, 如果一切正常的话,你应该看到:
MochiWeb running.
10. 到此为止,我们已经有了应用的骨架代码,接下来就是往里面添加功能了。每次修改后
cd d:/devel/erlang/myapp
make
如果你是用 start-dev.bat 运行的话,make生成的 beam 文件会被自动加载进来,
在 erlang 的shell中你可以看到
Reloading myapp_sup ... ok.
的信息(这里我修改的是 myapp/src/myapp_sup.erl 文件)。
OK,介绍完了, Happy Hacking!