Bundler, не работающий с rbenv, не смог найти [gem]
Я только что переключил с 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, но не смог ничего найти.
Примечание. В другом приложении synatra я получаю следующее при попытке запустить его:
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
Update
Если я выполняю bundle install --system
, он работает. Хотя я не вижу, чтобы это было жизнеспособным решением.
Ответы
Ответ 1
У меня была такая же проблема. Один из намеков заключался в том, что 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 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 из вашего домашнего каталога. Кажется, он мешает.
Ответ 2
Запустили ли вы
rbenv rehash
Это предоставит прокладки для всех рубиновых двоичных файлов, включая те, которые установлены драгоценными камнями.
Ответ 3
Добавление этого
set :default_environment, {
'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
}
для deploy.rb работал у меня.
http://henriksjokvist.net/archive/2012/2/deploying-with-rbenv-and-capistrano/
Ответ 4
Я предлагаю вам использовать драгоценный камень "capistrano-rbenv" (https://github.com/yyuu/capistrano-rbenv)
-
убедитесь, что у вас есть "rbenv" и рубиновая версия (например, 1.9.3), установленная на удаленном сервере
-
в файле config/deploy.rb(файл capistrano)
require 'capistrano-rbenv'
-
в вашем Gemfile:
gem 'capistrano-rbenv', '1.0.1'
-
что он. для отладки, если он работает, просто запустите:
$ 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]
Ответ 5
Вам следует попробовать chruby. chruby - ультра-минимальная (~ 80 строк) альтернатива RVM/rbenv. В отличие от rbenv, chruby не полагается на прокладки и просто изменяет PATH
, GEM_HOME
и GEM_PATH
.
Ответ 6
У меня была аналогичная проблема, когда я переключился с использования 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
все еще существует, вам нужно удалить это.
После изменения этих файлов вам нужно будет открыть новый сеанс терминала. Наконец, после всего, что я наконец получил синхронизатор и драгоценный камень.
Ответ 7
Просто напоминание, что rbenv не совместим с rvm, они не играют хорошо. Для вашего удобства удалите rvm, если вы хотите использовать rbenv. Из rbenv README:
Замечание о совместимости: rbenv несовместимо с rvm. Появятся вещи работать до тех пор, пока вы не попытаетесь установить драгоценный камень. Проблема в том, что rvm фактически переопределяет команду gem с помощью функции оболочки! пожалуйста удалите любые ссылки на rvm перед использованием rbenv.
К счастью, Wayne (создатель rvm) обеспечивает удаление rvm с помощью:
rvm implode
Как регулярное использование или:
rvmsudo rvm implode
Очистить систему rvm.
Ответ 8
Я пробовал все это здесь, но для меня это обнаружило, что у меня в моем домашнем каталоге пользователя был какой-то .bundler. Это вызывало странную проблему выше, где команда "which" правильно перечисляет пучок в пути прокладки, но проверка пакета -v показала старую версию системы, а /Users/jerimiah/.rbenv/shims/bundle - последние версии. Я удалил .bundler в своем домашнем каталоге, перезаписал, перезапустил мой терминал, и все начало работать.
Ответ 9
Дайте этому плагину rbenv попробовать, он сделает прокладки осведомленными о путях связки
https://github.com/carsomyr/rbenv-bundler