"bundle exec" жалуется на то, что gem не устанавливается, даже после "bundle install"

у меня есть сайт с помощью Джекилл с GitHub страниц. После того, как ранее возился с версиями и RVM на другом компьютере, на этом я решил придерживаться только одной версии Ruby и сред для каждого проекта с помощью bundler.

у меня довольно простой Gemfile:

[$]> cat Gemfile
source 'https://rubygems.org'
gem 'github-pages'

и конфигурация bundler:

[$]> cat .bundle/config
---
BUNDLE_PATH: env
BUNDLE_DISABLE_SHARED_GEMS: '1'

когда я запускаю любую команду (jekyll, gem, irb) через bundle exec, Я получаю зависимость ошибка:

[$]> bundle exec jekyll
Could not find RedCloth-4.2.9 in any of the sources
Run `bundle install` to install missing gems.

однако пакет уже установлен:

[$]> bundle install
Using RedCloth 4.2.9
Using i18n 0.6.11
Using json 1.8.1
[snip]
Using github-pages 29
Using bundler 1.7.7
Your bundle is complete!
It was installed into ./env

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

[$]> which ruby
/usr/local/bin/ruby
[$]> which bundler
/usr/local/bin/bundler
[$]> ruby --version
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14]
[$]> bundler --version
Bundler version 1.7.7

4 ответов


после удаления env каталог и переустановка, я заметил, что он создал подкаталоги для двух версий Ruby-2.1.0 и 2.2.0. Последняя была моей текущей версией Ruby, но каталог был пуст (все драгоценные камни были установлены в


у меня была точно такая же проблема после установки rbenv как мой менеджер Ruby. В конце концов я решил проблему с:

rbenv rehash

(кроме того, вам может потребоваться перезапустить терминал, согласно комментарию @joel-glovier)

тот факт, что он жалуется на Redcloth 4.2.9, на самом деле является красной селедкой. Бандлер, вероятно, не может найти ни одного из драгоценных камней, но Redcloth-первый, кого он ищет, и поэтому он немедленно выходит с этой ошибкой.

в основном я установил rbenv и ruby 2.2.2 и изменены на эту версию с помощью rbenv global 2.2.2 но я забыл запустить rbenv rehash. Поэтому я предполагаю, что при запуске bundle install Он смотрел на мою ранее использованную версию ruby (system ruby), чтобы увидеть, какие драгоценные камни были установлены, но при запуске bundle exec jekyll serve Он смотрел на мою новую версию ruby и не нашел никаких драгоценных камней.


мне пришлось открыть ./.bundle/config и установить BUNDLE_DISABLE_SHARED_GEMS to true для связки драгоценных камней, которые должны быть правильно локально сохранены.


Я определил BUNDLE_GEMFILE = /home/app/current/Gemfile in .файл bashrc. Это сломало bundle exec при развертывании новой версии на сервере. Проверьте с env что у вас нет BUNDLE_GEMFILE определено в переменных среды.

добавил BUNDLE_GEMFILE в .файл bashrc для облегчения работы с командами monit. Теперь я просто определяю переменную в начале команды monit.