为啥捆绑器不安装 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.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
看来 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?的主要内容,如果未能解决你的问题,请参考以下文章