您可以 add/remove 在 Ruby 中以编程方式或作为命令行 arg 要求 RubyGems 吗?

Can you add/remove required RubyGems programmatically in Ruby or as a command line arg?

我有一个测试套件,旨在 运行 本地和云供应商。当测试在本地 运行 时,我想使用 RubyGem,它利用 运行 更快的本机扩展。但是,在云供应商上,我不能包含 gem 的这种特殊风格,必须使用不同的。

有什么方法可以通过命令行参数,或者作为 Ruby 中的函数添加或删除 gem 要求?

您可以将 require 语句包装在 if/else.

if `hostname`.strip == 'local'
    require 'ruby_ext_gem'
else
    require 'ruby_native_gem'
end

或运行带有-r选项的Ruby解释器。

ruby -rruby_ext_gem -rruby_ext_gem2 script.rb

也许 bundler 就是您要搜索的内容?

#Gemfile
source 'https://rubygems.org'
group 'local' do
  gem 'ruby_ext_gem'
  gem 'ruby-ldap', require: 'ldap'
end

group 'cloud' do
  gem 'ruby_native_gem'
  gem 'ruby-net-ldap', require: 'net/ldap'
end

# local
bundle install --without cloud
# cloud
bundle install --without local

#script.rb
#!/usr/bin/env ruby
require 'bundler/setup'
Bundler.require(`hostname`.strip)