从gem外部运行Ruby gem exe文件

时间:2016-06-01 21:43:54

标签: rubygems

我在弄清楚如何运行我为宝石构建的可执行文件时遇到了一些麻烦。我已经取得了一些进展,但感觉我做错了。我有以下结构。

my_gem
|__ exe
  |__ foo
|__ lib
  |__ commands
     |__ foo 
        |__ actions.rb

我的exe/foo文件包含以下内容

#!/usr/bin/env ruby

require 'commands/foo/actions'

MyGem::Commands::Foo.start(ARGV)

my_gem目录中,如果我执行bundle exec exe/foo,一切似乎都正常。此特定命令实际上在my_gem/the_app内生成Rails应用程序。这有效,但我注意到我的命令和新生成的Rails应用程序存在一些微妙的问题。我真正想做的是从gem目录外部运行命令。如果我执行my_gem/exe/foo,我会收到以下错误:

/home/me/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- commands/foo/actions (LoadError).

如果只是从exe/foo文件夹中执行my_gem,我也会遇到同样的错误。

我已经能够通过运行rake buildrake install来解决这个问题。然后,我可以在任何我想要的地方运行foo,并从gem外部获取已安装的版本。但是,每次我想测试它时,构建/安装gem都会很痛苦。

有没有办法可以从gem目录外部执行命令的开发版本?

1 个答案:

答案 0 :(得分:0)

我在exe / foo中添加了以下内容,它似乎有所帮助

lib = File.expand_path('../../lib', __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)