手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜Qcloud , 注册 | 登陆
浏览模式: 标准 | 列表分类:Go

gogs 0.6.1版二进制打包文件缺少start.sh

在gogs的release包中,linux_amd64.zip这个包里,scripts目录下没有start.sh这个文件,因此在 执行./scripts/gogs_supvisor.sh文件的时候会直接后/usr/local/bin/gogs_start文件不存在

打开这个gogs_supvisor.sh文件后,发现他会判断/usr/local/bin/gogs_start文件是否存在,如果不存在就将./scripts/start.sh文件复制 过去并改为为gogs_start

然而,scripts目录下并没有这个start.sh文件,这个问题在官方的issue中已经提出并有解决方案:https://github.com/gogits/gogs/issues/1198

解决方案就是:

XML/HTML代码
  1. oh man sorry for that.  
  2.   
  3. I would suggest install supervisor as init.d somehow doesn't worked for me after trying lot of diffrent combinations. to do that,  
  4.   
  5. sudo apt-get -y install supervisor  
  6.   
  7. and edit its file via  
  8.   
  9. sudo nano /etc/supervisor/supervisord.conf  
  10.   
  11. [program:gogs]  
  12. directory=/home/git/go/src/github.com/gogits/gogs/  
  13. command=/home/git/go/src/github.com/gogits/gogs/gogs web  
  14. autostart=true  
  15. autorestart=true  
  16. startsecs=10  
  17. stdout_logfile=/var/log/gogs/stdout.log  
  18. stdout_logfile_maxbytes=1MB  
  19. stdout_logfile_backups=10  
  20. stdout_capture_maxbytes=1MB  
  21. stderr_logfile=/var/log/gogs/stderr.log  
  22. stderr_logfile_maxbytes=1MB  
  23. stderr_logfile_backups=10  
  24. stderr_capture_maxbytes=1MB  
  25. environment = HOME="/home/git", USER="git"  
  26.   
  27. change directory's to match your installation and user to your git user. and restart the supervisor via,  
  28. sudo service supervisor restart  
  29.   
  30. that's all you need to make gogs start automatically on boot.  

看上述内容,修改一下supervisor的配置,加入gogs的配置,注意修改成你自己的路径即可

Tags: gogs

NSQ

突然发现好象很久没有写过东西了。自从到了现在的公司,好象很多精力都放在了整理需求和写功能需求上面,代码啥的确实写的少了。

之所以提到nsq是因为我在写东西的时候发现点事情。其实好象可能用nsq处理会更好。
去年在想nsq的时候是写类似聊天室的玩意。当时就在想。nsq的一个topic是不是就相当于一个聊天室?在里面pub和sub,不就是一个正常的聊天过程吗?但最终还是没有用nsq。却自己实现了一个烂玩意
 
这两天我想到它,是因为nsq很多人还是当成一个队列来处理,那么基于go的队列?
如果我在抓取数据的时候,由主服务器向某一个topic发送要抓取的信息,其他订阅这个topic的程序就可以收到这个信息。然后开始解析并处理。这样是不是可以解决类似于中心服务器和其他采集服务器的事情呢?
 
然后找了下,phpnsq和pynsq都已经有人实现了。看起来好象是时候可以用它来尝试了?(http://bitly.github.io/nsq/clients/client_libraries.html)
最后提一句:phpnsq用的是reactPHP。
 
好了,半夜不写东西了。我继续 摸一下,好象nsqadmin有点意思。。
 

粗心安装go

由于buyvm的内存其实很少,所以我如果跑apache+php,担心会卡。所以我想是不是可以跑个go呢?

这不,我眼睛一闭,就参考http://golang.org/doc/install进行安装了。
 
然后到:https://code.google.com/p/go/downloads/list 兴冲冲的下载了go1.1.2.linux-amd64.tar.gz,就安装官方的教程开始了,因为我没有装过go,所以就直接tar -C 了
 
然而,运行的时候告诉我:-bash: /usr/local/go/bin/go: No such file or directory
 
当时我就纳闷了。这是怎么回事?难道他用的类库我没有更新?因为我是11.04的版本。所以我就apt-get update了一下,结果突然看到一条信息:Failed to fetch http://archive.ubuntu.com/ubuntu/dists/natty/main/binary-i386/Packages
 
等等,i386??不是amd64?心里仿佛突然明白了很多,于是施施然下载了一个:go1.1.2.linux-386.tar.gz,安装完毕后,运行go,直接就出来了。
 
细心才能解决问题。

利用 goquery 来取数据

 早期抓取数据都是偷懒用phpquery。用起来真心方便啊。刷刷刷的数据就取回来了。毕竟phpQuery还是相当模拟了jQuery的操作的。但现在在用go。怎么办?

其实go也有类似的工具,比如goquery,但使用起来确实不如phpQuery方便。举个小例子说明一下吧:

获取li数据中的第二个数据,那么jquery一般是这样写:$('li:eq(1)'),phpQuery呢。基本上也这样。pq('li:eq(1)'),但到了goquery就不能这样写了。我开始这样写的时候一直取不到数据。后来 才发现。。原来goquery必须得这样写:doc.Find("li").Eq(1)。虽然phpquery等也有类似方法,但如果放在Find里面不就好了嘛。真是的

OK写个简单的例子。。

XML/HTML代码
  1. var doc * goquery.Document  
  2. var e error  
  3. if doc, e = goquery.NewDocument(PROXY_FOREIGN_PAGE_URL); e != nil {  
  4.     ConsoleLog(e)  
  5.     return ;  
  6. }  
  7. doc.Find("tr ").Each(func(i int, ss * goquery.Selection) {  
  8.     s := *ss.Find("td");  
  9.     if s.Length() == 6 {  
  10.         port , _ :strconv.Atoi(s.Eq(1).Text());  
  11.         if port > 1 {  
  12.             var pInfo ProxyInfo  
  13.             pInfo.Ip = IpString(s.Eq(0).Text());  
  14.             pInfo.Port = PortString(s.Eq(1).Text());  
  15.             ProxyInfoLists = append(ProxyInfoLists , pInfo);  
  16.         }  
  17.   
  18.     }  
  19. })  
goquery的项目地址是:github.com/PuerkitoBio/goquery

Tags: goquery, phpquery

知乎:为什么要使用 Go 语言,Go 语言的优势在哪里?

 知乎上有人提问:为什么要使用go语言,go语言的优势是啥 ?

XML/HTML代码
  1. 使用Go语言开发的比较成功的软件有哪些?  
  2. 国内有哪些公司正在使用Go,有什么指导意见吗?  
然后两位网友提供了比较全的意见,一位是知乎的人员,一位是Asta谢(goweb编程的作者)。
在转贴这两位的意见前,先做个小广告,beego在谋求赞助了,在这个页面有赞助链接:http://beego.me/donate,如果你不想点上述地址而又想捐助的话,可以直接点击:http://me.alipay.com/astaxie 进行捐赠,话说回来,我在我的博客顶部那么大的链请:请膘叔喝啤酒,都没有人有反应,心真是哇凉哇凉的。。。
 
好吧,抹完辛酸泪,开始转贴知乎工程师的回复 :
XML/HTML代码
  1. Rio,知乎工程师  
  2. 杨肉、陈俊文、知乎用户 等人赞同  
  3. 知乎大部分项目是 Python 写的,有几个小项目是用 Go 写的。我从一个 Python 为主的开发者的角度说说对 Go 的优点的体会吧:  
  4. 部署简单。Go 编译生成的是一个静态可执行文件,除了 glibc 外没有其他外部依赖。这让部署变得异常方便:目标机器上只需要一个基础的系统和必要的管理、监控工具,完全不需要操心应用所需的各种包、库的依赖关系,大大减轻了维护的负担。这和 Python 有着巨大的区别。由于历史的原因,Python 的部署工具生态相当混乱【比如 setuptools, distutils, pip, buildout 的不同适用场合以及兼容性问题】。官方 PyPI 源又经常出问题,需要搭建私有镜像,而维护这个镜像又要花费不少时间和精力。  
  5. 并发性好。Goroutine 和 channel 使得编写高并发的服务端软件变得相当容易,很多情况下完全不需要考虑锁机制以及由此带来的各种问题。单个 Go 应用也能有效的利用多个 CPU 核,并行执行的性能好。这和 Python 也是天壤之比。多线程和多进程的服务端程序编写起来并不简单,而且由于全局锁 GIL 的原因,多线程的 Python 程序并不能有效利用多核,只能用多进程的方式部署;如果用标准库里的 multiprocessing 包又会对监控和管理造成不少的挑战【我们用的 supervisor 管理进程,对 fork 支持不好】。部署 Python 应用的时候通常是每个 CPU 核部署一个应用,这会造成不少资源的浪费,比如假设某个 Python 应用启动后需要占用 100MB 内存,而服务器有 32 个 CPU 核,那么留一个核给系统、运行 31 个应用副本就要浪费 3GB 的内存资源。  
  6. 良好的语言设计。从学术的角度讲 Go 语言其实非常平庸,不支持许多高级的语言特性;但从工程的角度讲,Go 的设计是非常优秀的:规范足够简单灵活,有其他语言基础的程序员都能迅速上手。更重要的是 Go 自带完善的工具链,大大提高了团队协作的一致性。比如 gofmt 自动排版 Go 代码,很大程度上杜绝了不同人写的代码排版风格不一致的问题。把编辑器配置成在编辑存档的时候自动运行 gofmt,这样在编写代码的时候可以随意摆放位置,存档的时候自动变成正确排版的代码。此外还有 gofix, govet 等非常有用的工具。  
  7. 执行性能好。虽然不如 C 和 Java,但通常比原生 Python 应用还是高一个数量级的,适合编写一些瓶颈业务。内存占用也非常省。  
转贴之后部分版式没有了,将就一点吧。国庆后想办法重构一下。
下面是asta谢(谢孟军)的回复:
XML/HTML代码
  1. 谢孟军,盛大云计算  
  2. Sariel、张东亚、林文 等人赞同  
  3. 我尝试来回答你几个问题:  
  4. 1、Go有什么优势  
  5. 可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了。  
  6. 静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高。  
  7. 语言层面支持并发,这个就是Go最大的特色,天生的支持并发,我曾经说过一句话,天生的基因和整容是有区别的,大家一样美丽,但是你喜欢整容的还是天生基因的美丽呢?Go就是基因里面支持的并发,可以充分的利用多核,很容易的使用并发。  
  8. 内置runtime,支持垃圾回收,这属于动态语言的特性之一吧,虽然目前来说GC不算完美,但是足以应付我们所能遇到的大多数情况,特别是Go1.1之后的GC。  
  9. 简单易学,Go语言的作者都有C的基因,那么Go自然而然就有了C的基因,那么Go关键字是25个,但是表达能力很强大,几乎支持大多数你在其他语言见过的特性:继承、重载、对象等。  
  10. 丰富的标准库,Go目前已经内置了大量的库,特别是网络库非常强大,我最爱的也是这部分。  
  11. 内置强大的工具,Go语言里面内置了很多工具链,最好的应该是gofmt工具,自动化格式化代码,能够让团队review变得如此的简单,代码格式一模一样,想不一样都很困难。  
  12. 跨平台编译,如果你写的Go代码不包含cgo,那么就可以做到window系统编译linux的应用,如何做到的呢?Go引用了plan9的代码,这就是不依赖系统的信息。  
  13. 内嵌C支持,前面说了作者是C的作者,所以Go里面也可以直接包含c代码,利用现有的丰富的C库。  
  14. 2、Go适合用来做什么  
  15. 服务器编程,以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。  
  16. 分布式系统,数据库代理器等  
  17. 网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用、  
  18. 内存数据库,前一段时间google开发的groupcache,couchbase的部分组建  
  19. 云平台,目前国外很多云平台在采用Go开发,CloudFoundy的部分组建,前VMare的技术总监自己出来搞的apcera云平台。  
  20. 3、Go成功的项目  
  21. nsq:bitly开源的消息队列系统,性能非常高,目前他们每天处理数十亿条的消息  
  22. docker:基于lxc的一个虚拟打包工具,能够实现PAAS平台的组建。  
  23. packer:用来生成不同平台的镜像文件,例如VM、vbox、AWS等,作者是vagrant的作者  
  24. skynet:分布式调度框架  
  25. Doozer:分布式同步工具,类似ZooKeeper  
  26. Heka:mazila开源的日志处理系统  
  27. cbfs:couchbase开源的分布式文件系统  
  28. tsuru:开源的PAAS平台,和SAE实现的功能一模一样  
  29. groupcache:memcahe作者写的用于Google下载系统的缓存系统  
  30. god:类似redis的缓存系统,但是支持分布式和扩展性  
  31. gor:网络流量抓包和重放工具  
  32. 以下是一些公司,只是一小部分:  
  33. http://Apcera.com  
  34. http://Stathat.com  
  35. Juju at Canonical/Ubuntu, presentation  
  36. http://Beachfront.iO at Beachfront Media  
  37. CloudFlare  
  38. Soundcloud  
  39. Mozilla  
  40. Disqus  
  41. http://Bit.ly  
  42. Heroku  
  43. google  
  44. youtube  
  45. 下面列出来了一些使用的用户  
  46. GoUsers - go-wiki - A list of organizations that use Go.  
  47. 4、Go还存在的缺点  
  48. 以下缺点是我自己在项目开发中遇到的一些问题:  
  49. Go的import包不支持版本,有时候升级容易导致项目不可运行,所以需要自己控制相应的版本信息  
  50. Go的goroutine一旦启动之后,不同的goroutine之间切换不是受程序控制,runtime调度的时候,需要严谨的逻辑,不然goroutine休眠,过一段时间逻辑结束了,突然冒出来又执行了,会导致逻辑出错等情况。  
  51. GC延迟有点大,我开发的日志系统伤过一次,同时并发很大的情况下,处理很大的日志,GC没有那么快,内存回收不给力,后来经过profile程序改进之后得到了改善。  
  52. pkg下面的图片处理库很多bug,还是使用成熟产品好,调用这些成熟库imagemagick的接口比较靠谱  
  53.   
  54.   
  55. 最后还是建议大家学习Go,这门语言真的值得大家好好学习,因为它可以做从底层到前端的任何工作。  
  56.   
  57. 学习Go的话欢迎大家通过我写的书来学习,我已经开源在github:  
  58. astaxie/build-web-application-with-golang · GitHub  
  59.   
  60. 还有如果你用来做API开发或者网络开发,那么我做的开源框架beego也许适合你,可以适当的来学习一下:  
  61. astaxie/beego · GitHub  
其实关于语言类的东西最烦人,每种新语言的出来总是为了解决某些特定问题,既然是解决特定问题,那么肯定就会带来一些新的问题,不过我觉得,只要你认为它够你使用,就够了,毕竟go可以相对比较完美的支持CGO,那还有什么不能解决的呢?PHP就是因为没有办法引用C代码,虽然可以dl一些so文件,也可以用java bridge来调用,但终究都是实验性的东西,不够完善。
 
如果你有兴趣学go,看了上面的内容,或许尝试一下也不错,毕竟go上手还是很快的,虽然对于PHPer来说有点痛苦,一下子从弱类型变成强类型,真心不习惯 。
 
 
 
Records:331234567