Почему сборщик не устанавливает гем JSON?


82

При попытке запуска я получаю следующую ошибку cap production deploy.

DEBUG [dc362284]    Bundler::GemNotFound: Could not find json-1.8.1.gem for installation
DEBUG [dc362284]    An error occurred while installing json (1.8.1), and Bundler cannot continue.
DEBUG [dc362284]    Make sure that `gem install json -v '1.8.1'` succeeds before bundling.

Возможно, важно отметить, что это развертывание работало, чем я обновился до Ruby 2.1.0, чтобы удалить ошибку кодирования. Я обновился локально, и все работало нормально. Я запустил rvm install 2.1.0и rvm use 2.1.0изменил свой .ruby-versionфайл, чтобы отразить это обновление Ruby.

Команда bundle installработает локально, но выдает ту же ошибку выше, когда я отправляю ssh на целевой сервер и запускаю эту команду.

Если я побегу, gem listто увижу это в списке драгоценных камней.

...
jquery-rails (3.0.4)
json (1.8.1)
less (2.3.2)
...

Если я попробую рекомендованное решение gem install json -v '1.8.1'локально и на конечном сервере, я получу следующий результат:

Building native extensions.  This could take a while...
Successfully installed json-1.8.1
Parsing documentation for json-1.8.1
Done installing documentation for json after 0 seconds
1 gem installed

Похоже, драгоценный камень установлен, не так ли? Почему это происходит? Как я могу это решить? Любая помощь будет принята с благодарностью.


Что bundle show jsonвам дает?
user2503775

Добавить gem json, '1.8.1'в Gemfile
user2503775

К сожалению, у меня есть gem json, '1.8.1' в моем gemfile
Thomas

bundle show json give /Users/ME/.rvm/rubies/ruby-2.1.0/lib/ruby/gems/2.1.0/gems/json-1.8.1
Thomas

6
Мне нужно было sudo apt-get install ruby-devна моем Ubuntu.
e9t 01

Ответы:


74
$ bundle update json
$ bundle install

2
Это помогло мне на Ruby 2.4.0!
Windmill

Работает и для rbenv ruby ​​2.4.1 (debian / ubuntu)
Алексей Дерягин

Это сработало и для меня. Ruby 2.4.0 High Sierra. Спасибо!
Robert_T_Taylor

У меня тоже работал под Ruby версии 2.4.2p198. Благодарю.
fatihturan 05

Я поддержал этот ответ, потому что он сработал для меня, а принятый ответ - нет. Как и @Robert_T_Taylor, я запускал это на macOS High Sierra.
Скотт Лоуренс

68

Итак, спустя полдня и почти сразу после публикации своего вопроса я нашел ответ. Bundler 1.5.0 имеет ошибку, из-за которой он не распознает драгоценные камни по умолчанию, как указано здесь.

Решением было обновление до бандлера 1.5.1, используя gem install bundler -v '= 1.5.1'


10
Была такая же проблема даже после обновления сборщика, выполнение gem install json -v '1.8.1'после обновления устранило сообщение об ошибке для меня.
Джейсон Денни

5
gem install json -v '1.8.1'за которым последовал bundle packageтрюк для меня
Оби

Спас меня несколькими матерными словами. Спасибо за это!
Catfish

1
Разве сборщик не должен устанавливать эти драгоценные камни за вас? Я не понимаю, зачем вам устанавливать драгоценные камни вручную. bundler.io/rationale.html Я использую Bundler версии 1.7.11
Snowcrash

2
Я использую бандлер версии 1.14.6 и тоже получаю эту ошибку
Catfish


41

если вы используете MacOS Sierra и ваша рубиновая версия - 2.4.0. Рубиновая версия несовместима с json 1.8.3.

Вы можете попробовать добавить эту строку в свой Gemfile:

gem 'json', github: 'flori/json', branch: 'v1.8'

У меня это работает!


Спасибо, это избавило меня от многих разочарований!
Echelon

33

Чтобы решить эту проблему, просто запустите:

bundle update

Это обновит версию вашего сборщика. Затем запустите:

bundle install

Ваша проблема будет решена. Решение хорошо объяснено здесь .


1
+1 Действительно помогло и заставило меня оторваться. После bundle updateэтого установка прошла отлично. Спасибо за чистое решение.
twknab

3
bundle updateобновит все ваши драгоценные камни. gem update bundlerобновит бандлер.
eebbesen

20

Я нашел решение здесь . Проблема с json версии 1.8.1 и ruby ​​2.2.3, поэтому установите версию json 1.8.3.

gem install json -v1.8.3

1
Это фантастически сработало для меня на OSX и Ubuntu с несколькими плохими версиями json gem. В одном случае мне пришлось удалить файл блокировки и перестроить с нуля: git rm Gemfile.lock bundle install
fuzzygroup

2
Работало нормально, сначала удаляю Gemfile.lockа потом просто запускаю bundle installи все.
alexventuraio

12

Ты должен попытаться

$ sudo gem install json -v '1.8.2'

в моем случае (Ubuntu 14.04) это не работало напрямую, и мне пришлось сделать это:

$ sudo apt-get install ruby-dev

а затем я мог установить драгоценный камень и продолжить. Была еще одна проблема, которую исправили:

$ sudo apt-get install libsqlite3-dev

Надежда помогает.


9

Если рекомендуемый ответ не помог, потому что вы уже используете более новую версию бандлера. Попробуйте решение, которое сработало для меня.

Удалите все, что находится в папке вашего поставщика. Добавьте строку в свой гем-файл

gem 'json', '1.8.0'

Затем запустите - bundle update json.

Кажется, это проблема с 1.8.1, поэтому возвращение к 1.8.0 помогло мне.


Сработало при обновлении с ruby ​​2.0.0 до 2.2.4.
Loubot 05

1
Не нужно все удалять. "bundle update json" достаточно.
Джоффри Баратеон,

1
Использование gem 'json', '1.8.6'сработало для меня. Вы можете попробовать это.
etagwerker

7

Я столкнулся с этой ошибкой при попытке запустить проект на моем локальном компьютере разработчика (OSX 10.6), используя Sinatra и Postgresql (через activerecord), работающий на rvm'd ruby ​​2.1. Я нашел свой ответ здесь: https://github.com/wayneeseguin/rvm/issues/2511

Моя точная проблема (после первого блока записей журнала):

Я также получаю сообщение об ошибке при попытке создать собственные расширения для драгоценных камней

Ответ :

rvm переустановите 2.1.0 --disable-binary

Объяснение :

OSX не имеет диспетчера пакетов, поэтому все библиотеки должны быть установлены пользователем вручную, это делает практически невозможным динамическое связывание двоичного файла, и, как вы можете видеть, существуют проблемы с (псевдо) статически связанным двоичным файлом.

Для полноты картины я сначала забыл обновить rvm ( rvm get head), что привело к некоторым другим ошибкам, но --disable-binaryфлаг все же мне нужен, как только я это сделал.


Получите следующую ошибку с вашим решением: «Версия '2.1.0' неоднозначна. Невозможно выбрать реализацию / версию Ruby, укажите более конкретную информацию. Невозможно переустановить неизвестный пакет ''"
Holyredbeard

У вас может не быть Ruby 2.1.0 или более одной версии, установленной через rvm. Запустите rvm list, и вы увидите, какая у вас текущая версия. Используйте полную строку (например, ruby-2.0.0-p451) вместо 2.1.0указанной выше.
Матиас


5

Когда я попытался установить json gem, используя gem install jsonотдельно от простого использования, которое bundle installя получил ERROR: Failed to build gem native extension., поискав это, я обнаружил, что использую

    apt-get install ruby-dev

сделал трюк


потрясающе - ты спас мне день!
Unkas 05

3

Для OS X убедитесь, что у вас есть coreutils

$ brew install coreutils
$ bundle

1
Хотя я получил предупреждение «Предупреждение: coreutils 8.32 уже установлен и обновлен», это помогло.
Пол Вершур

2

Похоже, это ошибка Bundler, не распознающая драгоценные камни по умолчанию, установленные вместе с ruby ​​2.x. У меня все еще возникала проблема даже с последней версией бандлера (1.5.3).

Одно из решений - просто удалить json-1.8.1.gemspec из каталога gemspec по умолчанию.

rm ~/.rubies/ruby-2.1.0/lib/ruby/gems/2.1.0/specifications/default/json-1.8.1.gemspec

После этого у сборщика не должно возникнуть проблем с поиском драгоценного камня. Обратите внимание, что я использую chruby. Если вы используете какой-либо другой менеджер рубинов, вам придется соответствующим образом обновить свой путь.


ага, решить проблему с json bundle несложно. Спасибо
hainguyen

2

Мне не хватало заголовков C, решение было загрузить его для Xcode, это лучший способ.

xcode-select --install

Надеюсь, поможет.


2

Пакет не смог установить json -v '1.8.1', и удаление моего Gemfile.lock и запуск пакета снова решили эту проблему для меня.


1

Я установил последнюю версию json:

gem install json

Затем удалил строку json (1.8.1) из Gemfile.lock и сделал

bundle install

И тогда файл Gemfile.lock использует json (1.8.3) без ошибок


1
Просто запуск обновления пакета решил эту проблему для меня ... другими словами, с помощью новой сборки JSON gem.
Фрэнсис Маллок,


0

Для меня некоторые из упомянутых ранее ответов были полезны с точки зрения понимания, но они не решили мою проблему.

Вот что я сделал, чтобы решить проблему.

  • Изменен gemfile.lock для обновления json (2.0.2) ( ранее было 1.8.3 )
  • Проверить установленную версию Bundler ( Bundler -vкоманда). У меня была установлена ​​версия 1.12.5
  • Установите бандлер версии 1.11.2 (используя gem install bundler -v '1.11.2' )
  • Затем запустите установку пакета

0

Для macOS Sierra:

Я столкнулся с этой ошибкой, когда использовал bundler ( v1.15.3) в v4.2проекте Rails ( ). Решение для меня - gem uninstall bundler -v '1.15.3'и gem install bundler -v '1.14.6'.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.