捆绑器为什么不安装JSON gem?


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文件,以反映该红宝石升级。

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 2014年

添加gem json, '1.8.1'到Gemfile
2014年

不幸的是,我的gemfile中已经有gem json,'1.8.1'–
Thomas Thomas,

捆绑包显示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

Answers:


73
$ bundle update json
$ bundle install

2
这在Ruby 2.4.0上为我完成了!
风车

也适用于rbenv ruby​​ 2.4.1(debian / ubuntu)
Aleksey Deryagin

这也为我工作。Ruby 2.4.0 High Sierra。谢谢!
Robert_T_Taylor

在Ruby版本2.4.2p198下也为我工作。谢谢。
fatihturan

我赞成这个答案,因为它对我有用,而所接受的答案却没有。就像@Robert_T_Taylor一样,我在macOS High Sierra上运行了它。
Scott Lawrence

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为我做了把戏
Obie

为我省了几句起誓。谢谢你!
fish鱼

1
捆绑软件不是应该为您安装这些gems吗?我不明白为什么您必须手动安装gem。bundler.io/rationale.html我正在使用Bundler版本
1.7.11

2
我正在使用捆绑程序版本1.14.6,并且也收到此错误
Catfish


41

如果您使用的是MacOS Sierra并且您的ruby版本是2.4.0.ruby版本与json 1.8.3不兼容。

您可以尝试在Gemfile中添加以下行:

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

这对我有用!


谢谢,这让我省了很多挫败感!
梯队

32

要解决此问题,只需运行:

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捆绑安装
Fuzzygroup

2
工作正常,首先我删除了Gemfile.lock,然后运行bundle install,仅此而已。
alexventuraio '16

12

你应该试试

$ sudo gem install json -v '1.8.2'

就我而言(Ubuntu 14.04)无法直接运行,我必须这样做:

$ sudo apt-get install ruby-dev

然后我可以安装gem并继续。还有一个由以下问题解决的问题:

$ sudo apt-get install libsqlite3-dev

希望能有所帮助。


9

如果建议的答案没有帮助,因为您已经在使用较新版本的捆绑软件。尝试对我有用的解决方案。

删除供应商文件夹中的所有内容。在您的gemfile中添加一行

gem 'json', '1.8.0'

然后运行- bundle update json

1.8.1似乎有问题,所以回到1.8.0可以解决问题。


从ruby 2.0.0升级到2.2.4时工作。
Loubot '02

1
无需删除所有内容。“捆绑更新json”已足够。
Joffrey Baratheon

1
使用gem 'json', '1.8.6'对我有用。您可能想尝试一下。
etagwerker

7

我在尝试使项目在rvm'd ruby​​ 2.1上运行并使用Sinatra和Postgresql(通过activerecord)在我的本地开发盒(OSX 10.6)上运行时遇到了此错误。我在这里找到了答案:https : //github.com/wayneeseguin/rvm/issues/2511

我的确切问题(在第一个日志条目块之后):

当尝试为gem建立本机扩展时,我也会收到错误消息

回答

rvm重新安装2.1.0 --disable-binary

解释

OSX没有软件包管理器,因此所有库都必须由用户手动安装,这实际上使动态链接二进制文件成为不可能,并且您可以看到(伪)静态链接二进制文件存在问题。

为了完整起见,我首先忘记更新rvm(rvm get head),这会产生其他错误,但是--disable-binary一旦完成,仍然需要该标志。


解决方案出现以下错误:“版本'2.1.0'不明确。无法选择Ruby实现/版本,请更具体。无法重新安装未知的软件包”“
holyredbeard 2014年

您可能没有ruby 2.1.0,或通过rvm安装了多个版本。运行rvm list,您将看到当前的版本。使用完整的字符串(例如ruby-2.0.0-p451)代替2.1.0上面提到的字符串。
Matthias 2014年


5

当我试图安装使用JSON宝石gem install json从仅仅使用单独的bundle installERROR: Failed to build gem native extension.,看着那个,我发现使用

    apt-get install ruby-dev

做到了


太神奇了-你救了我的一天!
Unkas '18

3

对于OS X,请确保您具有coreutils

$ brew install coreutils
$ bundle

1
尽管我收到警告“警告:coreutils 8.32已经安装并且是最新的”,但这确实可以解决问题。
Paul Verschoor

2

这似乎是Bundler中的错误,无法识别与ruby 2.x一起安装的默认宝石。即使使用最新版本的捆绑器(1.5.3),我仍然遇到问题。

一种解决方案是简单地从默认gemspec目录中删除json-1.8.1.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

Bundle无法安装json -v'1.8.1'并删除我的Gemfile.lock并再次运行bundle为我解决了此问题。


1

我安装了最新版本的json:

gem install json

然后从Gemfile.lock中删除行json(1.8.1)并执行

bundle install

然后Gemfile.lock文件使用没有错误的json(1.8.3)


1
只需运行捆绑更新即可为我解决此问题……换句话说,就是使用更新的JSON gem构建。
弗朗西斯·马洛赫


0

对我来说,从理解的角度来看,前面提到的一些答案很有帮助,但这些并不能解决我的问题。

所以这就是我解决问题的方法。

  • 修改了gemfile.lock以更新json(2.0.2)(之前是1.8.3
  • 检查已安装的捆绑软件版本(Bundler -v命令)。我安装了1.12.5版本
  • 安装捆绑程序版本1.11.2(使用gem install bundler -v '1.11.2'
  • 然后运行捆绑安装

0

对于macOS Sierra:

v1.15.3在Rails(v4.2)项目中使用bundler()时遇到此错误。对我来说gem uninstall bundler -v '1.15.3',解决方案是和gem install bundler -v '1.14.6'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.