运行 Ruby gem 来自外部的 exe 文件 gem

Running Ruby gem exe file from outside the gem

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

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).

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

我已经通过 运行宁 rake buildrake install 解决了这个问题。然后我可以 运行 foo 就在我想要的任何地方,它会从 gem 之外获取安装的版本。然而,每次我想测试它时,build/install gem 是一件痛苦的事情。

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

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

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