如果我使用脚本中的反引号以编程方式安装gem,命令为gem install gem_name
:
if not_gem_installed
`gem install my_gem`
end
require 'my_gem'
当调用gem时,会出现LoadError
错误。有什么方法可以修复这个问题吗?
我尝试用反引号安装gems,发现我遇到了问题,就像问题中提到的一样。我认为这不是这项工作的最佳选择。 我建议使用Gem来搜索gems并进行安装。
require 'rubygems/commands/install_command'
def find_or_install(gem_name)
Gem::Specification::find_by_name(gem_name)
rescue Gem::LoadError
install_gem(gem_name)
end
def install_gem(gem_name)
cmd = Gem::Commands::InstallCommand.new
cmd.handle_options [gem_name]
cmd.execute
rescue Gem::SystemExitException => e
puts "FAILURE: #{e.exit_code}"
end
https://gist.github.com/adamjmurray/3154437 - 包含优秀示例的代码片段
由于您没有使用RubyGems,因此需要从您的gem路径中要求特定文件。 RubyGems覆盖了require
方法,以便它查找要从Gemfile
中包含的gem路径中包括的文件路径。 因此,请确保指定正确的路径到您的gem的主要.rb文件。
if not_gem_installed
`gem install my_gem`
end
require 'path/to/my_gem'
$:
的值或在命令行中运行gem environment
命令来检查Ruby将要查找的路径。uzbekjon@mini:~$ gem environment
RubyGems Environment:
- RUBYGEMS VERSION: 2.5.1
- RUBY VERSION: 2.3.0 (2015-12-25 patchlevel 0) [x86_64-darwin15]
- INSTALLATION DIRECTORY: /Users/uzbekjon/.rvm/gems/ruby-2.3.0
- USER INSTALLATION DIRECTORY: /Users/uzbekjon/.gem/ruby/2.3.0
- RUBY EXECUTABLE: /Users/uzbekjon/.rvm/rubies/ruby-2.3.0/bin/ruby
- EXECUTABLE DIRECTORY: /Users/uzbekjon/.rvm/gems/ruby-2.3.0/bin
- SPEC CACHE DIRECTORY: /Users/uzbekjon/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /Users/uzbekjon/.rvm/rubies/ruby-2.3.0/etc
- GEM PATHS:
- /Users/uzbekjon/.rvm/gems/ruby-2.3.0
- /Users/uzbekjon/.rvm/gems/ruby-2.3.0@global
- GEM CONFIGURATION:
...
=== OR with $: ===
uzbekjon@mini:~$ irb
2.3.0 :001 > $:
=> ["/Users/uzbekjon/.rvm/gems/ruby-2.3.0@global/gems/did_you_mean-1.0.0/lib", "/Users/uzbekjon/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0", "..."]
你可以在你的脚本中简单地使用bundler。
if not_gem_installed
`gem install my_gem`
end
require 'rubygems' # <= This line here
require 'path/to/my_gem'
LoadError
的位置添加Ruby代码。 - Uzbekjon