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

qhwa · 2014年11月17日 · 最后由 ripper 回复于 2018年10月10日 · 10106 次阅读
本帖已被管理员设置为精华贴

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

后来虽然联系客服重新开通了账号,但还是心有余悸,觉得还是 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][gli],帮你很容易实现出类似 git 这样风格的脚本

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

[bundler][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

[huaban]: http://www.huaban.com [proj]: https://github.com/qhwa/huaban_exporter [gli]: https://github.com/davetron5000/gli [bundler]: http://bundler.io/

:plus1: 再详细点就更好了

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

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

不明觉厉。

工具挺实用。

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

水。。。。

9 楼 已删除

为何花瓣封账号呢?

果然简单

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

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

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

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

居然用的是 HTTParty,推荐 Curb

derick 回复

呃呃呃 挖个坟,文章进不去了。。。

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