Gem 请教: 写 Gem 的时候如何方便调试?

yanguango · 2015年08月22日 · 最后由 yanguango 回复于 2015年08月22日 · 2961 次阅读

在写 Gem 的时候怎么方便调试我到现在还没有找到方法,我现在使用的方法是在 Gem 文件夹里建一个 example 项目,在项目里使用 bundler,然后使用 path 指定 gem 的路径,这样就能写些例子来调试。或者使用 bundler gem自动生成的bin/console 在 irb 里调试。

但是如果写的 Gem 有可执行文件怎么调试这个 executable 呢,有没有方便的方法呢。总不能每次都要 gem build -> gem install 吧。

#1 楼 @flowerwrong 多谢。不过我是想调试,不是测试。

修改 load path 就可以,不用 install 一次

例如

$:.unshift "./lib"
require 'yourgem'

至于可执行文件的情况,你说的是 extension?

#3 楼 @luikore 不是 extension,是 bin 里面的可执行文件。把 gem 的源码路径加到 load path,bin 还是没在系统 PATH 里,安装 gem 的时候会在 rvm 的 bin 里面生成一个可执行文件去找这个 bin path

#!/usr/bin/env ruby_executable_hooks
#
# This file was generated by RubyGems.
#
# The application 'gli' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0"

if ARGV.first
  str = ARGV.first
  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
  if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
    version = $1
    ARGV.shift
  end
end

gem 'gli', version
load Gem.bin_path('gli', 'gli', version)

这个是生成的你不用管它,你写的 bin 文件直接用 require_relative 引用 lib 的文件就可以了

#2 楼 @yanguango 你如果不是写 example 给用户,测试中调试不是更好。

Gemfile 可以指定文件夹作为 gem 路径。这样你就可以在另一个 Rails app 里面调试了。

#6 楼 @flowerwrong 命令行工具的话,我开发的时候需要不停的试一试。

在 build, install 这个 gem 一次之后,如果在源码当前目录内,运行 exe 可执行文件,会自动调用源码中最新的版本。所以这样就解决了我上面说的调试的问题。

为什么会这样我还在看源码,解决了之后来回答。

#9 楼 @yanguango 就是上面的一行代码干的。

load Gem.bin_path('gli', 'gli', version)
需要 登录 后方可回复, 如果你还没有账号请 注册新账号