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