如何编译和启动erlang应用程序?

时间:2013-06-20 11:49:51

标签: erlang

如何在编译后启动跟随git应用程序?

my steps are:

1. clone git repository "git://github.com/michaelmelanson/spider.git"
2. cd spider
3  erl
Erlang R14B04 (erts-5.8.5) [source] [smp:2:2] [rq:2] [async-threads:0] [kernel-poll:false]

Eshell V5.8.5  (abort with ^G)
1> make:all().
up_to_date
2> 

最后,我如何展示应用程序相关的模块?

提前致谢。


感谢加入Michael,标准任务请求“task_master:insert_task(”http://www.id.uzh.ch“)。”工作正常。 但是,如果我尝试限制递归请求,我会收到一条错误消息:

* 1: record task undefined

不幸的是,我的建议不起作用!

rd(task, {url = "", depth = ""}).
 Task = #task{url="http://www.id.uzh.ch", depth=2}.
 task_master:insert_task(Task).

下一条错误消息是:

=ERROR REPORT==== 21-Jun-2013::09:47:42 ===
** Generic server <0.52.0> terminating 
** Last message in was {'$gen_cast',
                           {task,
                               {task,{task,"http://www.id.uzh.ch",2},[],-1}}}
** When Server state == {state}
** Reason for termination == 
** {{badmatch,{error,parse_url}},
    [{fetcher,process_task,1},
     {fetcher,handle_cast,2},
     {gen_server,handle_msg,5},
     {proc_lib,init_p_do_apply,3}]}`

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

Spider是一个erlang应用程序,因此可以使用application:start/1来运行它:

  1. cd spider

  2. erl -pa ebin

    所以erl找到蜘蛛侠文件

  3. 1> application:start(inets).

  4. 2> application:start(spider).

  5. 您可以阅读有关applications的更多信息。

答案 1 :(得分:3)

我是该代码的原作者。对不起,我根本没有记录它......这只是我大约5年前的一个侧面项目。所以这对我来说有点遥远的记忆,但这就是我所知道的。

johlo对于如何启动应用程序和插入任务是绝对正确的。您应该可以使用application:start(spider)启动它,然后使用task_master:insert_task/1方法插入新作业。它需要URL字符串或task记录。如果这对您不起作用,请告诉我。

应用程序运行后,执行task_master:insert_task("http://someurl.com/page.html")之类的操作会插入新任务以​​获取和处理网页。您可以在此处查看“流程”的含义:

https://github.com/michaelmelanson/spider/blob/master/src/fetcher.erl#L113

基本上它会获取页面,解析HTML,提取任何链接并将结果发送回task_master。然后task_master将插入新任务来处理每个链接,递归地抓取所有连接的页面。目前它对结果没有任何作用,但这是放置该代码的好地方:

https://github.com/michaelmelanson/spider/blob/master/src/fetcher.erl#L132

警告:默认情况下,它对爬行深度没有限制。留给自己的设备,它将递归地蜘蛛网整个网络。如果您计划在具有外发链接的任何网站上使用此功能,则应通过创建Task = #task{url="http://someurl.com/", depth=5};然后task_master:insert_task(Task)来限制抓取深度。

希望有所帮助。

答案 2 :(得分:1)

您不必启动Erlang shell来编译应用程序的源代码。你可以做到

erlc src/*.erl -o ebin/

在应用程序的文件夹中。

我还建议你试试rebar

https://github.com/rebar/rebar

这是一个可以轻松编译和测试Erlang应用程序的实用程序。