来自 rubygems 的 gem 安装在 gems 文件夹中,但来自 github 的 gem 安装在 bundler/gems 中
gem from rubygems installs in gems folder, but same gem from github installs in bundler/gems
我有一个小样本 ruby 文件和 Gemfile,我用它来诊断使用 git 作为源时出现的奇怪的不一致。当我 运行
ruby color.rb
我收到以下错误。
$ ruby color.rb
Traceback (most recent call last):
2: from color.rb:1:in `<main>'
1: from /Users/<user>/.rbenv/versions/2.5.1/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:92:in `require'
/Users/<user>/.rbenv/versions/2.5.1/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:92:in `require': cannot load such file -- colorize (LoadError)
宝石文件
# frozen_string_literal: true
source "https://rubygems.org"
gem 'colorize', :git => 'https://github.com/fazibear/colorize', :ref => '6f1b02342b1c6f45648e5203218c466dc7642125'
Color.rb
require 'colorize'
puts "This is blue".colorize(:blue)
问题
据我所知,我以这种方式在我的 Gemfile 中指定的来自 github 的 gems...
gem 'colorize', :git => 'https://github.com/fazibear/colorize', :ref => '6f1b02342b1c6f45648e5203218c466dc7642125'
...并使用bundle install
安装,将安装在此目录
/Users/<user>/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bundler/gems
但是,我以这种方式在我的 Gemfile 中指定的 rubygems 中的 gems...
source "https://rubygems.org"
gem 'colorize', '0.7.3'
...也使用bundle install
安装,会安装到这个目录
/Users/<user>/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems
我只是以着色为例,但这与任何其他 gem.
的行为相同
我想知道如何将我所有的 gem 直接从 github 获取,无论是通过分支还是通过 ref 安装在 2.5.0/gems
文件夹中,而不是2.5.0/bundler/gems
目录。
原因是每当我 运行 我的代码时,它 永远不会 使用 2.5.0/bundler/gems
目录中的 gem 并且只有 2.5.0/gems
目录中的 运行。我想一个替代的有效解决方案也可以解释如何让我的项目使用 2.5.0/bundler/gems
目录中的 gems,但主要问题是当使用 github 作为源时它将 gems 安装在与我的项目从中获取 gems 的目录不同的目录中。
环境信息
$ rbenv version
2.5.1 (set by /Users/<user>/.rbenv/version)
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin18]
注意:此时我在我的 Gemfile
中安装了 gem 和 gem 'colorize', '0.7.3'
$ bundle info colorize
* colorize (0.7.3)
Summary: Add color methods to String class
Homepage: http://github.com/fazibear/colorize
Path: /Users/<user>/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/colorize-0.7.3
$ gem which colorize
/Users/<user>/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/colorize-0.7.3/lib/colorize.rb
$ gem environment gempath
/Users/<user>/.gem/ruby/2.5.0:/Users/<user>/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
$ ruby -e 'puts Gem.default_dir'
/Users/<user>/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
$ gem environment
RubyGems Environment:
- RUBYGEMS VERSION: 3.1.2
- RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-darwin18]
- INSTALLATION DIRECTORY: /Users/<user>>/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
- USER INSTALLATION DIRECTORY: /Users/<user>>/.gem/ruby/2.5.0
- RUBY EXECUTABLE: /Users/<user>>/.rbenv/versions/2.5.1/bin/ruby
- GIT EXECUTABLE: /usr/local/bin/git
- EXECUTABLE DIRECTORY: /Users/<user>>/.rbenv/versions/2.5.1/bin
- SPEC CACHE DIRECTORY: /Users/<user>>/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /Users/<user>>/.rbenv/versions/2.5.1/etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-darwin-18
- GEM PATHS:
- /Users/<user>>/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
- /Users/<user>>/.gem/ruby/2.5.0
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
- SHELL PATH:
- /Users/<user>>/.rbenv/versions/2.5.1/bin
- /usr/local/Cellar/rbenv/1.1.2/libexec
- /Users/<user>>/Library/Android/sdk/build-tools
- /Users/<user>>/Library/Android/sdk/platform-tools
- /Users/<user>>/Library/Android/sdk/tools
- /Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/bin
- /Users/<user>>/.rbenv/shims
- /Users/<user>>/.rbenv/bin
- /usr/local/bin
- /usr/bin
- /bin
- /usr/sbin
- /sbin
- /Users/<user>>/Library/Android/sdk/build-tools
- /Users/<user>>/Library/Android/sdk/platform-tools
- /Users/<user>>/Library/Android/sdk/tools
- /Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/bin
- /Users/<user>>/.rbenv/shims
- /Users/<user>>/.rbenv/bin
您在您的应用程序中使用了捆绑器和 Gemfile,但没有使用捆绑器调用您的应用程序,因此当您调用 require 'colorize'
它不起作用,因为只有捆绑器可以告诉应用程序在哪里可以找到 gem.
您最简单的解决方案是使用捆绑器调用您的应用程序:
bundle exec ruby color.rb
我有一个小样本 ruby 文件和 Gemfile,我用它来诊断使用 git 作为源时出现的奇怪的不一致。当我 运行
ruby color.rb
我收到以下错误。
$ ruby color.rb
Traceback (most recent call last):
2: from color.rb:1:in `<main>'
1: from /Users/<user>/.rbenv/versions/2.5.1/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:92:in `require'
/Users/<user>/.rbenv/versions/2.5.1/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:92:in `require': cannot load such file -- colorize (LoadError)
宝石文件
# frozen_string_literal: true
source "https://rubygems.org"
gem 'colorize', :git => 'https://github.com/fazibear/colorize', :ref => '6f1b02342b1c6f45648e5203218c466dc7642125'
Color.rb
require 'colorize'
puts "This is blue".colorize(:blue)
问题
据我所知,我以这种方式在我的 Gemfile 中指定的来自 github 的 gems...
gem 'colorize', :git => 'https://github.com/fazibear/colorize', :ref => '6f1b02342b1c6f45648e5203218c466dc7642125'
...并使用bundle install
安装,将安装在此目录
/Users/<user>/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bundler/gems
但是,我以这种方式在我的 Gemfile 中指定的 rubygems 中的 gems...
source "https://rubygems.org"
gem 'colorize', '0.7.3'
...也使用bundle install
安装,会安装到这个目录
/Users/<user>/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems
我只是以着色为例,但这与任何其他 gem.
的行为相同我想知道如何将我所有的 gem 直接从 github 获取,无论是通过分支还是通过 ref 安装在 2.5.0/gems
文件夹中,而不是2.5.0/bundler/gems
目录。
原因是每当我 运行 我的代码时,它 永远不会 使用 2.5.0/bundler/gems
目录中的 gem 并且只有 2.5.0/gems
目录中的 运行。我想一个替代的有效解决方案也可以解释如何让我的项目使用 2.5.0/bundler/gems
目录中的 gems,但主要问题是当使用 github 作为源时它将 gems 安装在与我的项目从中获取 gems 的目录不同的目录中。
环境信息
$ rbenv version
2.5.1 (set by /Users/<user>/.rbenv/version)
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin18]
注意:此时我在我的 Gemfile
中安装了 gem 和gem 'colorize', '0.7.3'
$ bundle info colorize
* colorize (0.7.3)
Summary: Add color methods to String class
Homepage: http://github.com/fazibear/colorize
Path: /Users/<user>/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/colorize-0.7.3
$ gem which colorize
/Users/<user>/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/colorize-0.7.3/lib/colorize.rb
$ gem environment gempath
/Users/<user>/.gem/ruby/2.5.0:/Users/<user>/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
$ ruby -e 'puts Gem.default_dir'
/Users/<user>/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
$ gem environment
RubyGems Environment:
- RUBYGEMS VERSION: 3.1.2
- RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-darwin18]
- INSTALLATION DIRECTORY: /Users/<user>>/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
- USER INSTALLATION DIRECTORY: /Users/<user>>/.gem/ruby/2.5.0
- RUBY EXECUTABLE: /Users/<user>>/.rbenv/versions/2.5.1/bin/ruby
- GIT EXECUTABLE: /usr/local/bin/git
- EXECUTABLE DIRECTORY: /Users/<user>>/.rbenv/versions/2.5.1/bin
- SPEC CACHE DIRECTORY: /Users/<user>>/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /Users/<user>>/.rbenv/versions/2.5.1/etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-darwin-18
- GEM PATHS:
- /Users/<user>>/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
- /Users/<user>>/.gem/ruby/2.5.0
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
- SHELL PATH:
- /Users/<user>>/.rbenv/versions/2.5.1/bin
- /usr/local/Cellar/rbenv/1.1.2/libexec
- /Users/<user>>/Library/Android/sdk/build-tools
- /Users/<user>>/Library/Android/sdk/platform-tools
- /Users/<user>>/Library/Android/sdk/tools
- /Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/bin
- /Users/<user>>/.rbenv/shims
- /Users/<user>>/.rbenv/bin
- /usr/local/bin
- /usr/bin
- /bin
- /usr/sbin
- /sbin
- /Users/<user>>/Library/Android/sdk/build-tools
- /Users/<user>>/Library/Android/sdk/platform-tools
- /Users/<user>>/Library/Android/sdk/tools
- /Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/bin
- /Users/<user>>/.rbenv/shims
- /Users/<user>>/.rbenv/bin
您在您的应用程序中使用了捆绑器和 Gemfile,但没有使用捆绑器调用您的应用程序,因此当您调用 require 'colorize'
它不起作用,因为只有捆绑器可以告诉应用程序在哪里可以找到 gem.
您最简单的解决方案是使用捆绑器调用您的应用程序:
bundle exec ruby color.rb