Ruby 以编程方式安装 gem
Ruby programmatically installing a gem
如果我在脚本中使用反引号以编程方式安装 gem gem install gem_name
作为:
if not_gem_installed
`gem install my_gem`
end
require 'my_gem'
然后要求gem,出现LoadError
。有什么办法可以解决这个问题?
由于您没有使用 RubyGems,因此您需要从 gem 的路径中获取特定文件。 RubyGems 覆盖 require
方法,以便它从 Gemfile
中的 gem 路径中查找要包含的路径文件。因此,请确保您为 gem 的主 .rb 文件指定了正确的路径。
if not_gem_installed
`gem install my_gem`
end
require 'path/to/my_gem'
您可以通过在 file/irb 中打印 $:
的值或通过 运行 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", "..."]
或者
您只需在脚本中使用捆绑器即可。
if not_gem_installed
`gem install my_gem`
end
require 'rubygems' # <= This line here
require 'path/to/my_gem'
我尝试安装带有反引号的 gems,发现我遇到了与上述问题相同的问题。我发现这不是这项工作的最佳选择。
我建议使用 Gem 搜索 gem 和安装。
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 - 有很好例子的要点
如果我在脚本中使用反引号以编程方式安装 gem gem install gem_name
作为:
if not_gem_installed
`gem install my_gem`
end
require 'my_gem'
然后要求gem,出现LoadError
。有什么办法可以解决这个问题?
由于您没有使用 RubyGems,因此您需要从 gem 的路径中获取特定文件。 RubyGems 覆盖 require
方法,以便它从 Gemfile
中的 gem 路径中查找要包含的路径文件。因此,请确保您为 gem 的主 .rb 文件指定了正确的路径。
if not_gem_installed
`gem install my_gem`
end
require 'path/to/my_gem'
您可以通过在 file/irb 中打印 $:
的值或通过 运行 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", "..."]
或者
您只需在脚本中使用捆绑器即可。
if not_gem_installed
`gem install my_gem`
end
require 'rubygems' # <= This line here
require 'path/to/my_gem'
我尝试安装带有反引号的 gems,发现我遇到了与上述问题相同的问题。我发现这不是这项工作的最佳选择。 我建议使用 Gem 搜索 gem 和安装。
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 - 有很好例子的要点