测试ruby gem二进制文件

j_m*_*lly 12 ruby rubygems ruby-on-rails-3

我正在开发一个具有二进制文件的ruby gem.

我正在尝试开发二进制文件,但我担心它没有找到我的要求,因为宝石没有安装为宝石有没有办法测试二进制而不将其打包为宝石?

#!/usr/bin/env ruby

require "middleman_ember_scaffold/load_paths"

# Start the CLI
MiddlemanEmberScaffold::Cli::Base.start
Run Code Online (Sandbox Code Playgroud)

坐在一个名为mse的文件中,我将我的bin文件夹添加到路径中

.
??? middleman_ember_scaffold
    ??? Gemfile
    ??? LICENSE.txt
    ??? README.md
    ??? Rakefile
    ??? bin
    ?   ??? mes
    ??? lib
    ?   ??? middleman_ember_scaffold
    ?   ?   ??? cli.rb
    ?   ?   ??? load_paths.rb
    ?   ?   ??? version.rb
    ?   ??? middleman_ember_scaffold.rb
    ??? middleman_ember_scaffold.gemspec

4 directories, 10 files
Run Code Online (Sandbox Code Playgroud)

当我运行mes我得到

/Users/justin/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- middleman_ember_scaffold/load_paths (LoadError)
    from /Users/justin/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /Users/justin/middleman-generator/middleman_ember_scaffold/bin/mes:7:in `<main>'
Run Code Online (Sandbox Code Playgroud)

每当我做出改变时,我都希望能够运行和开发mes而不需要重新打包.

Mat*_*tti 18

可能采用"更好"的方式来做到以下几点:

$ ruby -I./lib bin/mes
Run Code Online (Sandbox Code Playgroud)

它与更改加载路径相同,但它只对您正在执行的命令执行此操作.


Tod*_*obs 3

使用 RUBYLIB 环境变量

您面临的问题是您的源目录没有对已安装的 gem 应用一些魔法,因此 $LOAD_PATH 中没有您的 lib 目录。虽然还有其他方法可以解决这个问题,但为了进行测试,我建议将 lib 目录添加到 RUBYLIB 环境变量中。例如:

RUBYLIB="/path/to/middleman_ember_scaffold/lib:$RUBYLIB"
export RUBYLIB
bin/mes
Run Code Online (Sandbox Code Playgroud)

应该适用于任何 Bourne 兼容的 shell。如果您正在运行 Bash,并且 RUBYLIB 中没有存储任何其他内容,您甚至可以将调用缩短为:

RUBYLIB="/path/to/middleman_ember_scaffold/lib" bin/mes
Run Code Online (Sandbox Code Playgroud)

不管怎样,一旦 Ruby 知道应该将哪些目录添加到 $LOAD_PATH 中,一切都会正常工作。