gem из rubygems устанавливается в папку gems, но тот же gem из github устанавливается в bundler / gems - PullRequest
0 голосов
/ 13 января 2020

У меня есть небольшой образец 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)

Gemfile

# 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)

Issue

Из того, что я могу сказать, гемы из github, которые я таким образом указываю в своем Gemfile ...

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

Однако драгоценные камни из rubygems, которые я таким образом указываю в своем Gemfile ...

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

Я просто использую colorize в качестве примера, но он работает так же, как и с любым другим драгоценным камнем.

Я хочу знать, как Я могу получить все свои гемы, которые я получаю напрямую, из github, либо по ветке, либо по ref для установки в папку 2.5.0/gems, а не в каталог 2.5.0/bundler/gems.

Причина этого заключается в том, что всякий раз, когда я запускаю свой код никогда не будет использовать гемы в каталоге 2.5.0/bundler/gems и запускаться только из каталога 2.5.0/gems. Я полагаю, что альтернативное правильное решение может также объяснить, как заставить мой проект использовать гемы в каталоге 2.5.0/bundler/gems, но основная проблема заключается в том, что при использовании github в качестве источника он устанавливает гемы в другой каталог, как мой проект. получает свои драгоценные камни от.

Environment Info

$ 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]

Примечание: В данный момент у меня установлен драгоценный камень с gem 'colorize', '0.7.3' в моем Gemfile

$ 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

1 Ответ

1 голос
/ 14 января 2020

Вы используете компоновщик и Gemfile в своем приложении, но не вызываете ваше приложение с компоновщиком, поэтому, когда вы вызываете require 'colorize', это не работает, потому что только компоновщик может сообщить приложению, где найти гем.

Самое простое решение - вызвать приложение с помощью упаковщика:

bundle exec ruby color.rb
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...