用Erlang写出的程序,如果使用依赖某一操作系统的专有技术,会在其他系统上跑不起来。
最近,学用Mochiweb过程中,在Windows的cygwin中遇到了这个问题。
Mochiweb创建新应用程序app的方法是,在其根目录下键入:
$ escript ./scripts/new_mochiweb.erl app
生成目录app,其中有几个子目录和源文件、shell命令文件等。
进入目录app,进行make,然后 $ ./start.sh 启动应用服务器。
打开浏览器,http://localhost:8000 ,出现网页,程序运行正常。
但是,由于Mochiweb是在Linux上开发的,使用了文件系统专门的link技术,Windows不予支持,在make时就会出现问题,当然也就无法启动。
问题的根源是Erlang函数 file:make_symlink/2
在eshell中试验:
1> file:make_symlink("1","2").
{error,enotsup}
2>
意思是:“error: Erlang not support”
解决的办法:
修改三个文件的内容 scripts/new_mochiweb.erl,src/mochiweb_skel.erl,app/start.sh
一切正常了。
在Mochiweb之上安装的Nitrogen也有相同问题,解决方法同上。