我很感激帮助gem install therubyracer
工作。这是错误:
$ gem install therubyracer
Building native extensions. This could take a while...
ERROR: Error installing therubyracer:
ERROR: Failed to build gem native extension.
/Users/david/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
checking for main() in -lobjc... yes
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
Provided configuration options:
--with-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/Users/david/.rvm/rubies/ruby-1.9.3-p194/bin/ruby
--with-objclib
--without-objclib
extconf.rb:15:in `<main>': undefined method `include_path' for Libv8:Module (NoMethodError)
以下是我在错误之前运行的一些值得注意的步骤。他们工作得很好:
$ gem install libv8
$ brew install v8
我的环境是:
答案 0 :(得分:106)
这对我有用:
$ gem uninstall libv8
$ gem install therubyracer
答案 1 :(得分:43)
gem uninstall libv8
brew install v8
gem install therubyracer
答案 2 :(得分:39)
但是,为什么会发生这种情况,你问?为什么卸载libv8
并重新安装therubyracer
可以解决问题?
答案位于错误消息的底部(来自orig post)。忽略关于
的内容probably lack of necessary libraries and/or headers
这是错误的假设,无论谁编写该错误消息。在底部,您可以看到Ruby对此有何评价:
undefined method `include_path' for Libv8:Module
在我的情况下,我尝试使用therubyracer-0.9.8
安装bundle install
,并且出于某种原因,它试图使用我的libv8-3.11.8.13
副本,该副本已在某些时候安装,可能是一些其他宝石的依赖。
我不知道为什么尝试使用较新的版本,因为therubyracer.gemspec
包含s.add_dependency "libv8", "~> 3.3.10"
。我的Gemfile.lock
说要使用libv8 (3.3.10.2)
。但唉,这确实是发生了什么。
Libv8:Module
在<{1}}中 在include_path
这就是为什么卸载{em>所有版本的libv8-3.11.8.13
然后重新安装libv8-3.3.10.2
的原因。因为没有方法libv8
的{{1}}的所有版本都已完全删除,而确实拥有<{em>}的therubyracer
重新安装libv8
时重新安装方法include_path
路径。
答案 3 :(得分:15)
考虑到没有,如果以上对我100%有效,我想我会发布什么(作为rails项目的一部分):
gem uninstall libv8
bundle update therubyracer
这确保我获得了最新的therubyracer
,以及更新版本的libV8
,并且似乎解决了我遇到的多个问题,从缺少的libv8.a文件到未定义的方法
答案 4 :(得分:12)
最后我使用了therubyracer 0.11.0beta5作为解决方案。
使用therubyracer(0.11.0beta5)
在Gemfile上添加以下内容
gem 'therubyracer', '~> 0.11.0beta5'
group :libv8 do
gem 'libv8', "~> 3.11.8"
end
然后bundle install
Mac OSX 10.8 Moutain Lion
答案 5 :(得分:10)
如果您需要0.11.3
并且它失败了,请为Mac OS X 10.9拍摄...
gem uninstall libv8
brew install v8
gem install libv8 -- --with-system-v8
gem install therubyracer -v '0.11.3' -- --with-system-v8
有关详细信息,请参阅this issue。
你可能不需要最后一行-- --with-system-v8
,但我这样做只是为了安全,因为我看到它在我运行命令时开始执行Fetching: libv8-3.11.8.17-x86_64-darwin-13.gem (1%)
...
无论如何,当所有其他事情都没有时,它对我有用。
答案 6 :(得分:7)
对于在Mac OSX 10.8 Mountain Lion尝试使用gem 'therubyracer', '0.11.0'
升级 Gemfile 时遇到此问题的任何人,只需升级系统libv8
gem就可以为我工作(无需卸载任何其他必要的宝石):
$ gem update libv8
$ bundle install
如果您使用Travis-CI(或我认为位于其他服务器上的其他CI工具),您还需要明确地将libv8
gem添加到 Gemfile 中:
<强>的Gemfile 强>
gem 'libv8', '3.11.8.3'
然后像往常一样bundle install
。请注意,libv8
可能需要花费大量时间进行安装,而且我注意到它可能最终导致重复Travis CI's timeout limits,从而导致构建失败。您可以稍微缓解这一点,不包括构建中的开发环境gem:
<强> .travis.yml 强>
# ...
bundler_args: --binstubs=./bundler_stubs --without development
是的,几乎所有我的Travis构建超时并因此而失败。如果有人知道解决这个问题的方法(我希望“降级therubyracer
”是最后的手段),请发表评论!
这可能不适用于所有应用,但似乎我的Rails 3.2.9应用实际上并不需要therubyracer
或libv8
。从我的 Gemfile 中删除这些宝石后,我确认我的规格已经通过,再次推送到Travis并成功构建。所以,我想摆脱那些宝石(如果你不确定你真的需要它们)至少值得一试。
感谢Paul Annesley确认如果您使用的是Mac OS X 10.8 Mountain Lion,那么您根本不需要therubyracer
gem,因为操作系统已经捆绑了Apple JavaScriptCore,它自己的Javascript跑步者。在最初答案的时候,我在Snow Leopard上,因此需要它。
答案 7 :(得分:4)
对我来说,删除Gemfile.lock文件并运行bundle install
是有用的。
答案 8 :(得分:3)
OSX 10.8.2,ruby 1.9.3p125
以上都没有为我工作......我厌倦了为我的环境找到合适的宝石,所以我只是软链接到g ++目标,这些东西都没有了:
sudo ln -s `which g++` /usr/bin/g++-4.2
对远程部署没有帮助,但在我的工作站上完成工作。
答案 9 :(得分:1)
我遇到了类似的问题,但它也抱怨没有找到g ++ - 4.2。我做了安装了XCode命令行工具,但它正在寻找/usr/bin/g++-4.2,我有g ++(这是一个指向llvm-g ++ - 4.2的符号链接)。无论如何,我刚刚创建了一个符合g ++的符号链接,并再次尝试了捆绑安装......它有效!
$ cd /usr/bin
$ sudo ln -s g++ g++-4.2
答案 10 :(得分:0)
有同样的错误,这对我有用:
从控制台:gem uninstall libv8
在您的Gemfile中,添加以下内容:
gem 'therubyracer', :platforms => :ruby, :require => 'v8'
gem 'libv8', '~> 3.11.8' # Update version number as needed
从控制台:bundle install
如果您正在升级therubyracer gem,您可能还想在此之后运行bundle update therubyracer
。 (考虑指定版本号)
这是在Mac 10.6(Snow Leopard)上。