如何执行已发布的Ruby Gem CLI应用程序

如何执行已发布的Ruby Gem CLI应用程序,ruby,rubygems,Ruby,Rubygems,几个月前,我创建了一个cliruby Gem,现在才开始发布它。如何测试执行gem以确保正确设置/发布gem?通常,我在终端中从gem的根目录运行bin/run,但我不知道如何从安装了gem的Rails目录运行它。基本上,我只是想确保我做的每件事都是正确的,并且它的工作符合预期 以下是供参考的gem:我发现这有一些问题。但首先,让我谈谈你最初的问题 要在命令行(终端)上测试它,请执行以下操作: 要在Bundler项目中测试它,请将phl-covid测试添加到gempec/gempec文件中。然后

几个月前,我创建了一个cliruby Gem,现在才开始发布它。如何测试执行gem以确保正确设置/发布gem?通常,我在终端中从gem的根目录运行
bin/run
,但我不知道如何从安装了gem的Rails目录运行它。基本上,我只是想确保我做的每件事都是正确的,并且它的工作符合预期


以下是供参考的gem:

我发现这有一些问题。但首先,让我谈谈你最初的问题

要在命令行(终端)上测试它,请执行以下操作:

要在Bundler项目中测试它,请将
phl-covid测试
添加到gempec/gempec文件中。然后这样做:

$ bundle install
$ bundle exec run
$ bundle exec rake install:local
现在来看问题。您在上面看到的第一个问题是,您将脚本命名为
run
。这将放在用户的路径上。最好将
bin/run
脚本重命名为
bin/phl-covid-testing
或其他内容

接下来,我不知道您是否对
bin/
中的脚本文件执行了
chmod+x
,但我假设您执行了。但是,查看文件的内容,您会发现:

#!/usr/bin/env ruby

require "bundler/setup"
require "./lib/environment"

PHLCovidTesting::CLI.new.call
您不应该使用
/lib/environment
,而应该只使用
要求“environment”
。您也不需要
要求“bundler/setup”
。如果您在本地测试,只需使用
bundle exec bin/run

接下来,不要使用名称
environment.rb
。我建议将此文件重命名为Gem的名称,因此它将是
phl-covid testing.rb

最后,你有很多不必要的文件。删除
.DS_Store
phl-covid-testing-0.1.0.gem
,并将它们添加到
.gitignore

# .gitignore
.DS_Store
*.gem
可能有更多的文件需要忽略,或者有更多的问题需要解决,但这些都是我一眼就能看到的主要问题

编辑: 我决定添加如何在不上传到RubyGems.org的情况下进行测试

如果您正在使用
bundler
rake
,并且在
Rakefile
中有
需要“bundler/gem_任务”
,则可以执行以下操作:

$ bundle install
$ bundle exec run
$ bundle exec rake install:local
这将在本地构建和安装Gem

否则,您也可以使用
gem
命令手动执行此操作:

## Remove old gems (optional).
$ rm -v *.gem

$ gem build phl_covid_testing.gemspec
$ gem install *.gem
有关更多信息,请参阅

然后尝试运行我前面提到的脚本:

$ phl_covid_testing
## Or with bundler:
$ bundle exec phl_covid_testing

如果您将其添加到Rails应用程序中,并且gem提供了一个可执行文件,那么应该可以通过
bundle exec my_gem
访问它。但是,看起来这只是一个普通的Ruby CLI(不需要rails),因此您可以在系统上执行
gem安装my_gem
,并以这种方式进行测试。或者你可以在某个地方创建一个新的GEMPile,然后安装到那里。@maxpleaner按照@EstericPig的建议进行了更新,然后尝试了这个方法,结果出现了一个非常严重的错误(尽管看起来我越来越接近了):
/Users/brianfirestone/.rvm/rubies/ruby-2.6.1/lib/ruby/site\u ruby/2.6.0/rubygems/core\u ext/kernel\u require.rb:54:in'require':无法加载此类文件--./lib/phl-covid测试(LoadError)
感谢您的更正!我很感激。我做了这些更新,但仍然无法运行gem(试图在终端中这样做)。因为我更新了可执行文件名,所以我假设我应该运行以下命令:
$gem install phl covid testing
$which phl covid testing
$phl covid testing
为了简洁起见,不包括整个堆栈跟踪,错误是:
/Users/brianfirestone/.rvm/rubies/ruby-2.6.1/lib/ruby/site\u ruby/2.6.0/rubygems/core\u ext/kernel\u require.rb:54:in'require':无法加载这样的文件--./lib/phl-covid测试(LoadError)
哦,好的,所以在
phl-covid测试的内部,您希望将require更改为
require'phl covid testing'
,而不使用
/lib/
部分。您可能可以使用require_relative,但我认为这样做更好
这当然不是必需的,但是查看它的位置很有帮助。如果您想在本地尝试(不推RubyGems),如果您的
Rakefile中有
需要“bundler/gem_任务”
,然后你可以只做
bundle exec-rake-install:local
或者你可以做
rake-install:local
或者用
gem-build*.gem&&gem-install*.gem
手动完成。我编辑了我的答案,加入了本地测试。你真是个圣人!这让我到了那里,现在一切都很好。非常感谢。