Gem 用 Ruby 开发命令行工具的一些 tips

qhwa · 发布于 2014年11月17日 · 最后由 jinleileiking 回复于 2016年09月23日 · 6176 次阅读
130
本帖已被设为精华帖!

最近 @季子乌 的 花瓣账号 突然被封,苦心采集的很多图片一下子全部看不到了!

后来虽然联系客服重新开通了账号,但还是心有余悸,觉得还是 pinterest 靠谱一些,准备把图片全部迁移到 pinterest 上。由于图片数量比较多,我就用 ruby 写了一个工具,将花瓣上的图片下载下来。(不过 pinterest 不能批量上传,这些图片也只是备份到本地,这是后话了)

这个项目已开源,地址是: https://github.com/qhwa/huaban_exporter

这个工具下载后,可以用执行 huaban 命令

huaban export boards --of qhwa

执行效果:

preview

我喜欢用命令行工作,之前做的几个 gem(lfd, fdlint)也都提供了命令行。这次就趁这个项目总结了一下怎样用 ruby 开发友好的命令行工具。

I. 初期怎样提高开发效率?

在写了基础的一些逻辑 model 后,我写个简单的 rake 文件,初期用 rake 来作为入口,边开发边测试。

一开始我只建了这样的一个 rake 任务,来调试获取画板列表功能:

rake boards         # 列出一个用户的所有画板 (user=用户名 rake boards)

后来随着功能不断完成,逐渐增加了几个新的任务,最后是完整的任务:

rake boards         # 列出一个用户的所有画板 (user=用户名 rake boards)
rake export_board   # 导出一个画板的所有图片到本地 (board_id=画板id  rake export_board)
rake export_boards  # 导出用户所有的画板图片到本地 (user=用户名 rake export_boards)
rake pins           # 列出一个画板所有的采集 (board_id=画板id rake pins)

II. 项目后期功能稳定后,怎么做命令行入口

rakefile 很适合自己用,但是要分发别人用,用 rakefile 就不方便了。做成带命令行脚本的 gem 更加方便。

  • 把你的脚本放到 bin 目录下
  • 加上执行权限(chmod a+x)
  • 加上 shebang, 比如 #!/usr/bin/env ruby

这一步我以前是用下面提到的 gli 来自动进行,但后来改成手动做了。因为 gli 生成了一些额外的文件,和 bundle 有点冲突。

III. 怎样让命令变得友好?

有个超棒的 gem 叫做 gli,帮你很容易实现出类似 git 这样风格的脚本

IV. 项目完成后,怎么用做成一个 gem,分享给别人?

bundler 提供了生成 gem 的功能

  1. bundle gem <name> 生成目录结构
  2. 修改 gemspec
  3. rake install 先在本地安装这个 gem 进行测试
  4. rake build 以最新的文件重新打包成 gem
  5. rake release 打包成gem, 生成 git tag,将gem上传到 https://rubygems.org
共收到 19 条回复
3135

:plus1: 再详细点就更好了

1551

谢谢分享 我只用过 OptionParser 写过。

130

#1楼 @robot_zhang 嗯,主要写的时候不知道大家的需求,后面可以加上 #3楼 @flowerwrong 😄 这是我花名,哈哈

4933

不明觉厉。

4257

工具挺实用。

5173

大家自己试试写写嘛,难度不大

9800

水。。。。

9楼 已删除
96

well done!

15924

为何花瓣封账号呢?

681

果然简单

130

#11楼 @mogodb 有些露点的人体模特图

96

colored 和progress-bar是神器啊!!!!

7593

有一个叫trollop的gem,github地址在这里 https://github.com/wjessop/trollop 。是我用过最方便的用Ruby写命令行脚本的工具。我写了一篇简单的介绍文章在这里:http://guihaojin.github.io/2014/05/13/ruby-command-line-tool/

96

刚刚看到这个帖子,我是花瓣网运营负责人,这个问题,实在是对不住。主要是因为国内内容监管太逗逼,屏蔽词太多了,不小心就会触发,我们每天都有专人跟进对误禁用户解禁的。

96

居然用的是 HTTParty,推荐 Curb

18464

强人一个

96

#15楼 @derick 这个好!!!

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册