Rails 捆绑安装不工作,因为 json 版本错误

Rails bundle install doesn't work 'cause json version error

我只是想从 ImageMagick v7 转换到 ImageMagick v6。 这样做时,发生了这个错误。

捆绑安装无法正常工作。

好像json版本有问题

如何修复此错误?

下面的环境

  1. ruby 2.3.1p112(2016-04-26 修订版 54768)[x86_64-darwin17]
  2. Rails -v(找不到 gem)(因为捆绑安装无法工作)
  3. json 列表/json(默认值:1.8.3) multi_json (1.13.1, 1.11.2, 1.11.0)
  4. 捆绑器版本 1.16.4
  5. Mac莫哈韦沙漠 10.14

当我在终端上进行捆绑安装时,出现了这个错误

Fetching gem metadata from https://rubygems.org/........
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies.......
Using rake 12.3.2
Using concurrent-ruby 1.1.4
Using i18n 0.9.5
Fetching json 1.8.6
Installing json 1.8.6 with native extensions
Errno::EPERM: Operation not permitted @ chmod_internal -
/Users/***/projects/***/vendor/bundle/ruby/2.3.0/gems/json-1.8.6/tests/test_json.rb
An error occurred while installing json (1.8.6), and Bundler cannot continue.
Make sure that `gem install json -v '1.8.6' --source 
'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
rails was resolved to 4.2.6, which depends on
actionmailer was resolved to 4.2.6, which depends on
  actionpack was resolved to 4.2.6, which depends on
    actionview was resolved to 4.2.6, which depends on
      rails-dom-testing was resolved to 1.0.9, which depends on
        rails-deprecated_sanitizer was resolved to 1.0.3, which depends on
          activesupport was resolved to 4.2.6, which depends on
            json

我试图这样做,因为错误声明说请确保
gem install json -v '1.8.6' --source 'https://rubygems.org/' 捆绑前成功

但是结果是这样的

ERROR:  While executing gem ... (Errno::EPERM)
Operation not permitted @ chmod_internal - /Users/***/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/json-1.8.6/tests/test_json.rb

我无法理解这个错误陈述

Errno::EPERM: Operation not permitted @ chmod_internal -

此外,我目瞪口呆,然后我更新 commandlinetool 遵循这个 https://howchoo.com/g/m2u0mmuwzda/macos-mojave-fix-invalid-active-developer-path

然后,我又做了这个命令,

sudo gem install json -v '1.8.6' --source 'https://rubygems.org/'

那么,就这样就彻底成功了。

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

但是,如果我进行捆绑安装,仍然无法正常工作:它们显示相同的错误。

我的建议是尽可能重新开始。可能你的rbenv没装好,重装试试,我建议用brew install rbenv https://github.com/rbenv/rbenv#homebrew-on-macos

确保将 eval "$(rbenv init -)" 添加到您的 ~/.bash_profile,然后打开一个新终端。

导航到项目目录并安装您需要的 Ruby 版本:rbenv install 2.3.1

您可以通过发出 rbenv use 2.3.1ruby --version 来确保您使用的是那个版本。

现在为 Ruby 版本安装捆绑器,我建议现在使用 1.17.3(2.0.1 之前的最新版本)gem install bundler -v '1.17.3'

您应该准备好 bundle install

我看到消息 Installing ... with native extensions 导致错误的最常见情况通常是由于缺少二进制文件、头文件和 C 相关代码来构建该本机扩展,在您的情况下,问题是由于权限,因此我建议进行一些全新安装。

如果可以的话,我支持@Danilo Cabello 的建议,重新开始。我还有其他一些解决问题的想法:

您的包在 /vendor/bundle 中安装 gems 的事实意味着在某些时候,您必须指定带有 bundle install --path vendor/bundle 的路径,正如@mogbee 所暗示的那样。该路径标志会将与您的 gem 关联的文件加载到 vendor/bundle 而不是您的系统 gem 位置。如果您试图将项目的 gem 与任何其他项目分开,您可能已经这样做了,但如果没有,您将需要更新捆绑程序的 gem 路径。

为此,首先,通过 运行ning bundle doctor 检查是否存在任何问题。如果未发现任何问题,请使用 bundle env 检查您的捆绑包配置。确保你的 RubyGems Gem Home 和 Gem Path 是通过 .rbenv 路由的,因此它们应该匹配并且看起来像 /Users/***/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0。如果它们不匹配,运行 下面的 rbenv-doctor 命令应确保您的 rbenv 安装正确导出路径。

如果 bundle env 的输出告诉您实际上 运行 正在使用旧版本的捆绑器(早于 1.16.4),我肯定会更新,并推荐 1.17 版.3 就像@Danilo Cabello 所做的那样。

其次,我会 运行 这个 rbenv-doctor curl 命令来检查你的 rbenv 安装状态:curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash (https://github.com/rbenv/rbenv-installer#rbenv-doctor).

第三,根据项目文件夹中 ls -l 的输出,您可能还想递归更改 ~/.rbenv 文件夹的 owner/group 以确保一切都归您所有而不是 root (https://superuser.com/questions/260925/how-can-i-make-chown-work-recursively/260939#260939)