我在弄清楚如何运行我为宝石构建的可执行文件时遇到了一些麻烦。我已经取得了一些进展,但感觉我做错了。我有以下结构。
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 build
和rake install
来解决这个问题。然后,我可以在任何我想要的地方运行foo
,并从gem外部获取已安装的版本。但是,每次我想测试它时,构建/安装gem都会很痛苦。
有没有办法可以从gem目录外部执行命令的开发版本?
答案 0 :(得分:0)
我在exe / foo中添加了以下内容,它似乎有所帮助
lib = File.expand_path('../../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)