为啥捆绑器不安装 JSON gem?

Posted

技术标签:

【中文标题】为啥捆绑器不安装 JSON gem?【英文标题】:Why won't bundler install JSON gem?为什么捆绑器不安装 JSON gem? 【发布时间】:2014-02-01 10:10:08 【问题描述】:

尝试运行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.0rvm 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

看来 gem 已安装,对吧?为什么会这样?我该如何解决这个问题?任何帮助将不胜感激。

【问题讨论】:

bundle show json 给你什么? gem json, '1.8.1' 添加到 Gemfile 不幸的是,我的 gemfile 中有 gem json, '1.8.1' bundle show json give /Users/ME/.rvm/rubies/ruby-2.1.0/lib/ruby/gems/2.1.0/gems/json-1.8.1 我的 Ubuntu 上需要 sudo apt-get install ruby-dev 【参考方案1】:
$ bundle update json
$ bundle install

【讨论】:

这是在 Ruby 2.4.0 上为我完成的! 也适用于 rbenv ruby​​ 2.4.1 (debian / ubuntu) 这对我也有用。 Ruby 2.4.0 高山脉。谢谢! 在 Ruby 版本 2.4.2p198 下也为我工作。谢谢。 我赞成这个答案,因为它对我有用,而接受的答案却没有。像@Robert_T_Taylor 一样,我在 macOS High Sierra 上运行了它。【参考方案2】:

因此,在这半天之后,几乎在发布我的问题后,我立即找到了答案。 Bundler 1.5.0 有一个错误,它无法将默认 gem 识别为 referenced here

解决方案是使用 gem install bundler -v '= 1.5.1' 更新到 bundler 1.5.1

【讨论】:

即使在更新捆绑程序后也有同样的问题,更新后执行gem install json -v '1.8.1' 为我修复了错误消息。 gem install json -v '1.8.1' 后跟 bundle package 对我有用 帮我省了几句脏话。谢谢! 难道不是 bundler 应该为你安装这些 gem 的吗?我不明白为什么你必须手动安装 gems。 bundler.io/rationale.html我正在使用 Bundler 版本 1.7.11 我正在使用 1.14.6 版本的捆绑程序并且也收到此错误【参考方案3】:

运行这个命令一切都会好的

sudo apt-get install libgmp-dev

【讨论】:

也为我工作 :) 谢谢! @Imran 你必须把它放在 linux 终端上。我猜你正在运行 Windows?【参考方案4】:

如果您在 MacOS Sierra 中并且您的 ruby​​ 版本是 2.4.0。ruby 版本与 json 1.8.3 不兼容。

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

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

这对我有用!

【讨论】:

谢谢你,这让我省去了很多挫折!【参考方案5】:

要解决这个问题,只需运行:

bundle update

它将更新您的捆绑程序的版本。然后运行:

bundle install

您的问题将得到解决。解决方案很好解释here

【讨论】:

+1 真的很有帮助,让我摆脱了困境。在bundle update 之后,安装效果很好。感谢您提供干净的解决方案。 bundle update 将更新您的所有宝石。 gem update bundler 将更新捆绑器。【参考方案6】:

我找到了解决方案here。 json版本1.8.1和ruby 2.2.3有问题,所以安装json 1.8.3版本。

gem install json -v1.8.3

【讨论】:

这对我来说在 OSX 和 Ubuntu 上的 json gem 的多个错误版本非常有效。在一种情况下,我不得不删除锁定文件并从头开始重建: git rm Gemfile.lock bundle install 工作正常,首先我删除了Gemfile.lock,然后运行bundle install,就这样。【参考方案7】:

你应该试试

$ sudo gem install json -v '1.8.2'

在我的情况下(Ubuntu 14.04)不能直接工作,我必须这样做:

$ sudo apt-get install ruby-dev

然后我可以安装 gem 并继续。还有一个问题已通过以下方式解决:

$ sudo apt-get install libsqlite3-dev

希望有所帮助。

【讨论】:

【参考方案8】:

如果推荐的答案没有帮助,因为您已经在使用较新版本的捆绑程序。试试对我有用的解决方案。

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

gem 'json', '1.8.0'

然后运行 ​​- bundle update json

这似乎是 1.8.1 的一个问题,所以回到 1.8.0 对我有用。

【讨论】:

从 ruby​​ 2.0.0 升级到 2.2.4 时工作。 无需删除所有内容。 “捆绑更新 json”就足够了。 使用gem 'json', '1.8.6' 为我工作。您可能想尝试一下。【参考方案9】:

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

我的exact problem(在第一块日志条目之后):

我在尝试为 gems 构建原生扩展时也遇到错误

answer:

rvm 重新安装 2.1.0 --disable-binary

explanation:

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

为了完整起见,我首先忘记更新 rvm (rvm get head),这产生了一些其他错误,但在我这样做后仍然需要 --disable-binary 标志。

【讨论】:

您的解决方案出现以下错误:“版本 '2.1.0' 不明确。无法选择 Ruby 实现/版本,请更具体。无法重新安装未知包 ''” 您可能没有安装 ruby​​ 2.1.0,或者通过 rvm 安装了多个版本。运行rvm list,您将看到您当前的版本。使用完整的字符串(例如 ruby​​-2.0.0-p451)而不是上面提到的 2.1.0【参考方案10】:

bundle update json。帮助度过难关。

【讨论】:

成功安装 json 1.8.6(原为 1.8.3)【参考方案11】:

当我尝试使用 gem install json 与仅使用 bundle install 分开安装 json gem 时,我得到了 ERROR: Failed to build gem native extension.,查找时发现使用

    apt-get install ruby-dev

成功了

【讨论】:

太棒了 - 你拯救了我的一天!【参考方案12】:

对于 OS X,请确保您有 coreutils

$ brew install coreutils
$ bundle

【讨论】:

虽然我收到警告“警告:coreutils 8.32 已安装并且是最新的”,但还是成功了。【参考方案13】:

这似乎是 Bundler 中的一个错误,无法识别与 ruby​​ 2.x 一起安装的默认 gem。即使使用最新版本的捆绑程序 (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

完成此操作后,bundler 应该可以毫无问题地找到 gem。请注意,我使用的是 chruby。如果您使用的是其他 ruby​​ 管理器,则必须相应地更新您的路径。

【讨论】:

是的,解决 json bundle 的问题很简单。谢谢【参考方案14】:

我缺少 C 头文件的解决方案是为 Xcode 下载它,这是最好的方法。

xcode-select --install

希望对你有帮助。

【讨论】:

【参考方案15】:

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

【讨论】:

【参考方案16】:

我安装了最新版的json:

gem install json

然后从 Gemfile.lock 中删除 json(1.8.1) 行并做了一个

bundle install

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

【讨论】:

运行一个包更新为我解决了这个问题......换句话说,使用更新的 JSON gem 构建。【参考方案17】:

使用 rvm 将 ruby​​ 版本从 1.9 切换到 2.2 为我完成了这项工作

【讨论】:

【参考方案18】:

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

这就是我为解决问题所做的。

修改 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') 然后运行捆绑安装

【讨论】:

【参考方案19】:

对于 macOS Sierra:

我在 Rails(v4.2) 项目中使用 bundler(v1.15.3) 时遇到了这个错误。 我的解决方案是gem uninstall bundler -v '1.15.3'gem install bundler -v '1.14.6'

【讨论】:

以上是关于为啥捆绑器不安装 JSON gem?的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 上安装 json gem 时出错

gem install sqlite3 有效,捆绑安装无效?

Rails 3:乘客找不到捆绑程序安装的 git gem

捆绑安装后Rails 3 Gemfile Gems未加载

导轨捆绑清洁

在Ruby中捆绑gem加载错误