我的可执行ruby gem不能按预期工作

时间:2015-12-15 03:47:44

标签: ruby-on-rails ruby gem rubygems

我按照本教程http://guides.rubygems.org/make-your-own-gem来弄清楚如何创建ruby gems,但我无法弄清楚如何创建可执行文件。

我原本以为我在自己的代码中犯了一个错误,但是用教程本身创建的实际gem似乎并没有像我预期的那样工作。因此,我将根据教程本身的实际宝石提出我的问题。

如果您将教程中的确切gem(gem名为hola)捆绑到rails应用程序并尝试使用可执行命令hola,则只会收到错误消息:

$ rails hola spanish
# => Error: Command 'hola' not recognized

$ ruby hola spanish
# => ruby: No such file or directory -- hola (LoadError)

$ hola spanish
# => -bash: hola: command not found

即使我尝试以这种方式执行命令,它似乎也不起作用:

$ ruby -Ilib ./bin/hola spanish
# => ruby: No such file or directory -- ./bin/hola (LoadError)

这个似乎执行任何事情的唯一时间是当我在教程中手动重新创建的实际gem目录中并输入:

$ ruby -Ilib ./bin/hola spanish
# => hola mundo

但这没用,因为创建可执行文件的重点是能够在实际项目中执行它而不是gem目录(即:有人下载你的gem并能够将它与单个可执行关键字一起使用,比如rake routes然后做某事。)

我可以从这个官方的rubygems.org教程中捆绑hola gem,并以我期望的方式将其用作可执行文件,如下所示:

$ hola spanish
# => hola mundo

如果可以的话,怎么做?

1 个答案:

答案 0 :(得分:0)

经过大量研究后,我发现这个问题最终与以下内容重复:

Building gem, executable not found

使这项工作的解决方案是编辑.gemspec中的部分:

s.files = ["lib/hola.rb", "lib/hola/translator.rb"]

并将其更改为:

s.files = Dir["{bin,lib}/**/*"]

现在,当我输入命令时,它完美地运作,如下所示:

$ hola spanish
# => hola mundo

$ hola english
# => hello world