捆绑安装错误“安装 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', '>=1.8.3'
将 json 的版本更改为 1.8.3 或更高版本。
【讨论】:
感谢您的回答!但我不确定如何编辑我的 Gemfile。我只需要在我的编辑器中打开 Gemfile 并添加:gem 'json', '>=1.8.3' 并保存吗?然后我在终端上运行 bundle install ?在我的项目目录中,我有 Gemfile 和 Gemfile.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: <= 1.8.6 : unsupported = 1.8.7 : gem install rdoc-data; rdoc-data --install = 1.9.1 : gem install rdoc-data; rdoc-data --install >= 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) 时发生错误”的主要内容,如果未能解决你的问题,请参考以下文章