运行 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 build
和 rake install
解决了这个问题。然后我可以 运行 foo
就在我想要的任何地方,它会从 gem 之外获取安装的版本。然而,每次我想测试它时,build/install gem 是一件痛苦的事情。
有没有办法可以从 gem 目录之外执行命令的开发版本?
我在 exe/foo 中添加了以下内容,它似乎有所帮助
lib = File.expand_path('../../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
我在弄清楚如何 运行 我正在为 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 build
和 rake install
解决了这个问题。然后我可以 运行 foo
就在我想要的任何地方,它会从 gem 之外获取安装的版本。然而,每次我想测试它时,build/install gem 是一件痛苦的事情。
有没有办法可以从 gem 目录之外执行命令的开发版本?
我在 exe/foo 中添加了以下内容,它似乎有所帮助
lib = File.expand_path('../../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)