Bundler не работает с rbenv, не может найти [gem] - PullRequest
40 голосов
/ 07 марта 2012

Я только что переключился с rvm на rbenv и пытаюсь использовать bundler для управления драгоценными камнями.После запуска bundle install и попытки запустить простое приложение sinatra (ruby app.rb) я получаю следующее:

Could not find haml-3.1.4 in any of the sources
Run `bundle install` to install missing gems.

Запуск bundle install снова не дал никакого эффекта.Также попытался bundle update, как это было предложено в ответе на другой вопрос.

Это мой Gemfile:

source "http://rubygems.org"

gem "sinatra"
gem "haml"

Это то, что bundle show производит

* bundler (1.0.22)
* haml (3.1.4)
* rack (1.4.1)
* rack-protection (1.2.0)
* sinatra (1.3.2)
* tilt (1.3.3)

что требуется моему приложению:

require "rubygems"
require "bundler/setup"
require 'sinatra'

Я убежден, что это какая-то проблема с путями, когда bundler и rbenv не играют друг с другом.Я попытался просмотреть документацию по rbenv, но ничего не смог найти.

Примечание. В другом приложении sinatra при его запуске я получаю следующее:

Could not find addressable-2.2.7 in any of the sources
Run `bundle install` to install missing gems.

Справочная информация

echo $PATH
/Users/uri/.rbenv/shims:/Users/uri/.rbenv/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

which bundle
/Users/uri/.rbenv/shims/bundle

Обновление

Если я сделаю bundle install --system, это сработает.Хотя я не вижу в этом жизнеспособного решения.

Ответы [ 9 ]

101 голосов
/ 22 июня 2012

У меня была такая же проблема.Один намек заключался в том, что rbenv exec bundle exec command сработало и что rbenv exec bundle install --path vendor/bundle сработало, но их префиксные эквиваленты не сработали.

Я несколько раз вытер свои ~/.rbenv, ~/.gem Gemfile.lock и vendor/bundle, пытаясь запуститьсвежий.После того, как они были удалены, я попробовал следующее:

rbenv install 1.9.3-p194
rbenv rehash # for paranoia's sake
rbenv global 1.9.3-p194
gem env # to check that everything was pointing at 1.9 and not the system
gem install --no-ri --no-rdoc bundler
rbenv rehash # necessary to load up the bundle executable
bundle --path=vendor/bundle

, и это сработало!

Я думаю, что важная вещь, поскольку я несколько раз пытался это, - удалить файл .gem.из вашего домашнего каталога.Кажется, мешает.

22 голосов
/ 09 марта 2012

Вы пробежали

rbenv rehash

Это обеспечит прокладки для всех исполняемых файлов ruby, включая те, что установлены gems.

20 голосов
/ 24 ноября 2012

Добавление этого

set :default_environment, {
  'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
}

для deploy.rb у меня сработало.

http://henriksjokvist.net/archive/2012/2/deploying-with-rbenv-and-capistrano/

6 голосов
/ 03 апреля 2013

Предлагаю вам использовать камень 'capistrano-rbenv' (https://github.com/yyuu/capistrano-rbenv)

  1. убедитесь, что на удаленном сервере установлена ​​версия "rbenv" и версия ruby ​​(например, 1.9.3)

  2. в вашем config / deploy.rb (файл capistrano)

    require 'capistrano-rbenv'
    
  3. в вашем Gemfile:

    gem 'capistrano-rbenv', '1.0.1'
    
  4. вот и все. для отладки, если это работает, просто запустите:

    $ cap shell
    cap> which ruby
     ** [out :: 10.103.13.74] /root/.rbenv/shims/ruby
    cap> ruby -v
     ** [out :: 10.103.13.74] ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-linux]
    
2 голосов
/ 10 декабря 2012

У меня была похожая проблема, когда я переключился с использования rvm на rbenv. Я обнаружил, что мой упаковщик показывает другой список драгоценных камней, чем моя команда gem list. Сначала проверьте, какие пути использует ваш компоновщик и гем. Для связки используйте команду show и выберите любой драгоценный камень.

$ bundle show ffi
/my/project/path/vendor/ruby/1.9.1/gems/ffi-1.1.5

и моя gem environment команда (частично)

$ gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 1.8.23
  - RUBY VERSION: 1.9.2 (2011-07-09 patchlevel 290) [x86_64-darwin10.8.0]
  - INSTALLATION DIRECTORY: /Users/rolf/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1

Здесь я мог видеть, что мой драгоценный камень указывает на правильный путь rbenv, но мой пакет указывает на путь поставщика моего проекта.

Выполнение следующей команды должно исправить проблему с путём компоновки:

$ bundle install --system

Путь Bundler должен теперь указывать на путь rbenv.

$ bundle show ffi
/Users/rolf/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/ffi-1.1.5

Также я обнаружил, что когда я запускаю команду rvm implode для удаления rvm, все еще были следующие файлы, которые мне нужно было изменить, чтобы удалить пути rvm:

~/.profile
~/.bashrc
~/.zshrc

Если путь ~/.rvm все еще существует, его необходимо удалить.

Вам нужно будет открыть новый сеанс терминала после изменения этих файлов. Наконец, после всего этого я наконец-то синхронизировал свой пакет и гем.

2 голосов
/ 21 ноября 2012

Вы должны попробовать использовать chruby .Chruby - это ультра-минимальная (~ 80 строк) альтернатива RVM / rbenv.В отличие от rbenv, chruby не полагается на прокладки и просто изменяет PATH, GEM_HOME и GEM_PATH.

1 голос
/ 28 декабря 2012

Я перепробовал все здесь, но для меня выяснилось, что по какой-то причине в моем домашнем каталоге пользователя есть .bundler.Это приводило к странной проблеме, описанной выше, когда команда 'which' правильно указала пакет в пути shims, но проверка пакета -v показала старую версию системы, а /Users/jerimiah/.rbenv/shims/bundle - последние версии.Я удалил .bundler в моей домашней директории, перепроверил, перезапустил мой терминал, и все начало работать.

1 голос
/ 06 сентября 2012

Просто напоминание, что rbenv не совместим с rvm, они не очень хорошо играют.Для вашего здравого смысла удалите rvm, если вы хотите использовать rbenv.Из rbenv README:

Примечание о совместимости: rbenv несовместим с rvm.Все будет работать, пока вы не попытаетесь установить драгоценный камень.Проблема в том, что rvm фактически переопределяет команду gem с помощью функции оболочки!Удалите все ссылки на rvm перед использованием rbenv.

К счастью, Уэйн (создатель rvm) легко удаляет rvm, используя:

rvm implode

Какрегулярное использование или:

rvmsudo rvm implode

Для очистки всей системы RVM.

0 голосов
/ 06 октября 2012

Дайте этому плагину rbenv попробовать, он заставит прокладки знать о путях компоновщика

https://github.com/carsomyr/rbenv-bundler

...