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

Tho*_*mas 80 gem capistrano ruby-on-rails bundler

尝试运行时出现以下错误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.
Run Code Online (Sandbox Code Playgroud)

值得注意的是,此部署正在运行,而不是我升级到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)
...
Run Code Online (Sandbox Code Playgroud)

如果我在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
Run Code Online (Sandbox Code Playgroud)

所以它似乎安装了宝石,对吗?为什么会这样?我怎么解决这个问题?任何帮助将不胜感激.

Tho*_*mas 68

所以经过半天的这一天,几乎在发布我的问题之后,我找到了答案.Bundler 1.5.0有一个错误,它无法识别此处引用的默认gem

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

  • 即使更新了捆绑包之后也有同样的问题,在更新后执行`gem install json -v'1.8.1'`为我修复了错误消息. (10认同)
  • ```gem install json -v'1.8.1'```后跟```bundle package```为我做了诀窍 (5认同)
  • `gem update bundler`解决了这个问题. (4认同)
  • 我正在使用bundler版本1.14.6并且也出现此错误 (2认同)

dnv*_*trn 68

$ bundle update json
$ bundle install
Run Code Online (Sandbox Code Playgroud)

  • 这在Ruby 2.4.0上为我做到了! (2认同)

Jam*_*and 48

运行此命令然后一切都会好的

sudo apt-get install libgmp-dev
Run Code Online (Sandbox Code Playgroud)


Jui*_*007 40

如果你在MacOS Sierra,你的ruby版本是2.4.0.ruby版本与json 1.8.3不兼容.

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

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

这适合我!


Roh*_*ary 28

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

bundle update

它将更新您的捆绑包的版本.然后运行:

bundle install

你的问题会得到解决.这里解释得很清楚.

  • `bundle update` 会更新你所有的 gem。`gem update bundler` 将更新 bundler。 (3认同)

Aje*_*han 20

我在这里找到了解决方案.json版本1.8.1和ruby 2.2.3存在问题,因此请安装json 1.8.3版本.

gem install json -v1.8.3
Run Code Online (Sandbox Code Playgroud)

  • 工作得很好,首先我删除`Gemfile.lock`然后只运行`bundle install`就是这样. (2认同)

小智 12

你应该试试

$ sudo gem install json -v '1.8.2'
Run Code Online (Sandbox Code Playgroud)

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

$ sudo apt-get install ruby-dev
Run Code Online (Sandbox Code Playgroud)

然后我可以安装宝石并继续.还有一个问题是:

$ sudo apt-get install libsqlite3-dev
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.


Mat*_*ias 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一旦我这样做了仍然需要标志.


Ada*_*dam 7

如果推荐的答案没有用,因为您已经在使用更新版本的bundler.尝试适合我的解决方案.

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

gem 'json', '1.8.0'
Run Code Online (Sandbox Code Playgroud)

然后跑 - bundle update json.

这似乎是1.8.1的一个问题,所以回到1.8.0对我来说是个窍门.


小智 5

bundle update json.帮助通过.


小智 5

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

    apt-get install ruby-dev
Run Code Online (Sandbox Code Playgroud)

成功了