Perl 板


LINE

完整图文版 http://blog.leezhenyu.com/2014/01/neo4j-perl-and-cgi.html ******* 这周末尝试做一些Neo4j的网页介面整合。 因为资料库最终还是需要有前端的查询介面。 测试了很多的Neo4j函式库,最後还是选择Perl。 Python的Django我不会,现在也没空学。 Ruby的部份,我已经忘了RoR(Ruby on Rails)。 用Perl配合CGI的作法还是容易许多。 首先要做的,是安装Neo4j的Perl函式库。 用CPAN安装就好,进入CPAN的指令介面後: install REST::Neo4p 就会开始安装所有必要套件,编译并且测试。 另外,Apache2网页伺服器也要开启CGI的支援, 主要是修改设定档,指定CGI程式的目录。 以Ubuntu为例,要修改的是/etc/apache2/sites-available/default 加上cgi执行目录的定义与允许的副档名 ScriptAlias /cgi-bin/ /var/www/cgi-bin/ <Directory /var/www/cgi-bin/> Options ExecCGI AddHandler cgi-script cgi pl </Directory> 以上面范例,要建一个cgi-bin的资料夹在/var/www目录下 (这是Ubuntu预设的网页根目录) 之後记得要重开Apache2伺服器 指令是sudo /etc/init.d/apache2 restart 安装并设定好了以後,先用简单的Perl程式来测试一下。 主要是验证资料库的连接没有问题。 我先在资料库主机端测试,避免一些意外状况。 就建立一个Perl的档案,然後包含以下的程式码内容: #!/usr/bin/perl -w #呼叫必要的函式库,特别是Neo4p use REST::Neo4p; use strict; use warnings; #建立一个与资料库伺服器的连线 REST::Neo4p->connect('http://127.0.0.1:7474'); #建立一个查询的物件 my $query = REST::Neo4p::Query->new( ' match(peptide)-[:HOST_IN]->({name:"Bos taurus"}) return peptide' #把Cypher语法写在括弧里面 ); #送出查询 $query->execute; print "Show me which peptide host in \"Bos taurus\"?\n"; while (my $result = $query->fetch) { #查询的结果被回传,开始Parse结果的JSON档案 print $result->[0]->get_property('name')."\n"; } 不意外,经过Perl跟Neo4j管理介面回传的结果都一致 但是我还想知道上面那个案例的回传矩阵是怎麽运作。 经过了解之後,写了一个稍微复杂的查询追踪程式逻辑。 #!/usr/bin/perl -w use REST::Neo4p; use strict; use warnings; REST::Neo4p->connect('http://127.0.0.1:7474'); print "The sequence of Chrombacin?\n"; #特别要看的部份是以下 my $query2 = REST::Neo4p::Query->new( 'match (peptide {name:"Chrombacin"})-[:HAS_SEQUENCE]->(sequence) return peptide,sequence' ); #尤其是这里 $query2->execute; while (my $result2 = $query2->fetch) { print $result2->[0]->get_property('name')."\n"; print $result2->[1]->get_property('seq')."\n"; } 现在要回传的有两个值(查询结果):peptide跟sequence $result2基本上是一个被parse过的阵列集合 $query2是经由Web Service回传的JSON档案 所以阵列集合里按照顺序,peptide就是[0],sequence是[1] 至於Properties的部份,对应的name跟seq。 是Node的属性设定,这在建立节点时就已经定义了。 执行看看这个perl script,结果符合预期。 现在要把Perl用CGI的方式执行,看看能不能成功用网页展示结果。 把同样perl script复制到/var/www/cgi-bin里面。 开启浏览器看看结果,竟然出现错误了。 查看其他可以运作的Perl CGI范例。 发现我少了网页伺服器可以剖析的元件。 Perl的输出要符合HTML跟浏览器的规范啊! 主要是MIME的定义。 所以一开始要先输出这一行: print "Content-type: text/html\n"; 然後其他要用HTML显示的元素也要符合语法。 例如说换行的部份,就要输出<br>的标签。 单单是"\n"并没有用,只有Perl知道。 HTML的换行是<br/>才对 小改一下perl script内容,存档之後重开就有了。 也请记得这个pl档案要赋予执行的权限。 sudo chmod +x case.pl ******* 以上,Perl跟Neo4j就是这麽简单。 附上官方的参考资料 -- http://blog.leezhenyu.com Technology, Study, Food, Travel --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 137.132.121.245
1F:推 abliou:笔记先推再说!! 01/26 23:12
2F:推 xatier:推 02/01 20:43
3F:推 flu:+1 02/02 02:50
4F:推 wangmj:Perl 写网页可以参考 Mojolicious or Dancer 02/15 12:01







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP