捆绑安装错误“安装 json (1.7.3) 时发生错误”

Posted

技术标签:

【中文标题】捆绑安装错误“安装 json (1.7.3) 时发生错误”【英文标题】:Bundle install error 'error occurred while installing json (1.7.3)' 【发布时间】:2016-02-01 07:34:05 【问题描述】:

我是初学者,当我尝试安装 Bundle 时,我不明白如何解决我的错误。我正在学习 Schneems 课程(目前正在做 routes_controller_exercise)。

这是我的错误:

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

/Users/admin/.rbenv/versions/2.2.3/bin/ruby -r ./siteconf20151101-96612-c518oi.rb extconf.rb
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling generator.c
In file included from generator.c:1:
./../fbuffer/fbuffer.h:158:47: error: too few arguments provided to function-like macro invocation
VALUE result = rb_str_new(FBUFFER_PAIR(fb));
                                          ^
/Users/admin/.rbenv/versions/2.2.3/include/ruby-2.2.0/ruby/intern.h:793:9: note: macro 'rb_str_new' defined here
#define rb_str_new(str, len) __extension__ (    \
    ^
In file included from generator.c:1:
./../fbuffer/fbuffer.h:158:11: warning: incompatible pointer to integer conversion initializing 'VALUE' (aka 'unsigned long') with an expression of type 'VALUE (const char *, long)' [-Wint-conversion]
VALUE result = rb_str_new(FBUFFER_PAIR(fb));
      ^        ~~~~~~~~~~
generator.c:867:22: warning: '&&' within '||' [-Wlogical-op-parentheses]
return *p == '[' && *q == ']' || *p == '' && *q == '';
       ~~~~~~~~~~^~~~~~~~~~~~ ~~
generator.c:867:22: note: place parentheses around the '&&' expression to silence this warning
return *p == '[' && *q == ']' || *p == '' && *q == '';
                 ^
       (                     )
generator.c:867:48: warning: '&&' within '||' [-Wlogical-op-parentheses]
return *p == '[' && *q == ']' || *p == '' && *q == '';
                              ~~ ~~~~~~~~~~^~~~~~~~~~~~
generator.c:867:48: note: place parentheses around the '&&' expression to silence this warning
return *p == '[' && *q == ']' || *p == '' && *q == '';
                                           ^
                                 (                     )
3 warnings and 1 error generated.
make: *** [generator.o] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/admin/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/json-1.7.3 for inspection.
Results logged to /Users/admin/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-15/2.2.0-static/json-1.7.3/gem_make.out
An error occurred while installing json (1.7.3), and Bundler cannot continue.
Make sure that `gem install json -v '1.7.3'` succeeds before bundling.

我不知道该怎么做。我是初学者,所以...请对我好一点!我一直在网上尝试许多解决方案,但到目前为止没有任何效果!我正在使用 El Capitan 10.11.1。

我已使用此链接设置 Ruby:http://guides.railsgirls.com/install/#virtual-machine。

现在做这个练习:https://github.com/schneems/routes_controller_exercise


更新:

所以我做到了:

bundle update json 

它一直工作到:

Installing eventmachine 0.12.10 with native extensions

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

/Users/admin/.rbenv/versions/2.2.3/bin/ruby -r ./siteconf20151101-99125-1vfqvuu.rb extconf.rb
checking for rb_trap_immediate in ruby.h,rubysig.h... no
checking for rb_thread_blocking_region()... no
checking for inotify_init() in sys/inotify.h... no
checking for __NR_inotify_init in sys/syscall.h... no
checking for writev() in sys/uio.h... yes
checking for rb_thread_check_ints()... yes
checking for rb_time_new()... yes
checking for sys/event.h... yes
checking for sys/queue.h... yes
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling binder.cpp
In file included from binder.cpp:20:
./project.h:103:10: fatal error: 'openssl/ssl.h' file not found
#include <openssl/ssl.h>
     ^
1 error generated.
make: *** [binder.o] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/admin/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/eventmachine-0.12.10 for inspection.
Results logged to /Users/admin/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-15/2.2.0-static/eventmachine-0.12.10/gem_make.out
An error occurred while installing eventmachine (0.12.10), and Bundler cannot continue.
Make sure that `gem install eventmachine -v '0.12.10'` succeeds before bundling.
ip-10-0-66-6:routes_controller_exercise Admin$ gem install eventmachine -v '0.12.10'
Building native extensions.  This could take a while...
ERROR:  Error installing eventmachine:
ERROR: Failed to build gem native extension.

解决方案

好的,我已经卸载 rails 并使用斯坦福网站重新安装它。

现在一切正常!我不知道是什么问题,但现在我安装 Bundle 没有任何问题。

【问题讨论】:

看来问题不在于 json gem,而在于 eventmachine。在 El Capitan 上安装 eventmachine 已经有一个很好的解决方案:***.com/questions/30818391/… 谢谢,我尝试了所有解决方案,但我从 json 错误变为 eventmachine 错误。我要重新安装所有东西。 【参考方案1】:

问题的一部分是由于rb_str_new 的更改。

这是他们 GitHub 页面上的一个相关问题:https://github.com/flori/json/issues/229

据我了解,贡献者决定不修复此问题,因为它在 json 1.8.3 中正常工作。建议您升级到该版本。 json gem 有一个非常稳定的 API,所以向后兼容性通常不是问题。

如果您使用的是 bundler,您应该转到您的 Gemfile 并使用 gem 'json', '&gt;=1.8.3' 将 json 的版本更改为 1.8.3 或更高版本。

【讨论】:

感谢您的回答!但我不确定如何编辑我的 Gemfile。我只需要在我的编辑器中打开 Gemfile 并添加:gem 'json', '>=1.8.3' 并保存吗?然后我在终端上运行 bundle install ?在我的项目目录中,我有 GemfileGemfile.lock 。在 Gemfile 中,我看不到 json 但我在 Gemfile.lock ( ** json (1.7.3)** ) 中看到了。我是 Ruby 新手,所以对于非常基本的问题,我深表歉意。 我刚刚添加了我的情况更新。我想我要哭了,我好困惑。 @imagirl92 只需将它添加到您的 Gemfile 中,就像您解释正确的声音一样。这是***.com/questions/30818391/…@***.com/questions/30818391/… 的 eventmachine 的一个很好的答案如果你使用自制软件 (brew install openssl) 安装了 openssl,你应该没问题只需执行bundle config build.eventmachine --with-cppflags=-I$(brew --prefix openssl)/include 然后再次执行bundle install 如果bundle update json 不起作用,并且如果您不依赖Gemfile 中未指定的任何特定版本的gem,您可以删除Gemfile.lock 并再次运行bundle install。然后,bundler 将为所有与 Gemfile 中定义的版本匹配的 gem 搜索最佳可用版本。 我认为它有效@aross !谢谢你。只是为了确保,我最后有这条消息(我的 Ruby 版本:ruby 2.2.3p173):Post-install message from rdoc: Depending on your version of ruby, you may need to install ruby rdoc/ri data: &lt;= 1.8.6 : unsupported = 1.8.7 : gem install rdoc-data; rdoc-data --install = 1.9.1 : gem install rdoc-data; rdoc-data --install &gt;= 1.9.2 : nothing to do! Yay!【参考方案2】:

在 Gemfile 中添加

gem 'json', '1.7.3'

之后,

捆绑安装

【讨论】:

这不会改变任何东西,因为版本 1.7.3 已经是捆绑程序根据错误消息尝试安装的版本。使用gem install json -v '1.7.3' 可能会为您提供更多信息来解决问题,或者允许您添加其他选项来喜欢--with-opt-dir=[dir]bundle config 也可以用于此)。

以上是关于捆绑安装错误“安装 json (1.7.3) 时发生错误”的主要内容,如果未能解决你的问题,请参考以下文章

捆绑安装错误“安装 json (1.7.3) 时发生错误”

elasticbeanstalk的捆绑安装错误

捆绑安装失败并出现 SSL 证书验证错误

安装奏鸣曲新闻捆绑作曲家错误

Php致命错误:使用composer安装用户捆绑时内存大小耗尽

将安装使用错误捆绑标识符“(null)”调用的 Watch App