我很感激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)
Run Code Online (Sandbox Code Playgroud)
以下是我在错误之前运行的一些值得注意的步骤.他们工作得很好:
$ gem install libv8
$ brew install v8
Run Code Online (Sandbox Code Playgroud)
我的环境是:
Dav*_* J. 106
这对我有用:
$ gem uninstall libv8
$ gem install therubyracer
Run Code Online (Sandbox Code Playgroud)
(非常感谢http://www.ruby-forum.com/topic/4306127)
Ken*_*ika 43
gem uninstall libv8
brew install v8
gem install therubyracer
Run Code Online (Sandbox Code Playgroud)
Mar*_*yne 40
但是,为什么会发生这种情况,你问?为什么卸载libv8和重新安装会therubyracer解决问题?
答案位于错误消息的底部(来自orig post).忽略那些东西
probably lack of necessary libraries and/or headers
Run Code Online (Sandbox Code Playgroud)
编写该错误消息的人是错误的假设.在底部,您可以看到Ruby对此有何评论:
undefined method `include_path' for Libv8:Module
Run Code Online (Sandbox Code Playgroud)
就我而言,我试图安装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也不能有方法include_path的libv8-3.11.8.13,但它确实在libv8-3.3.10.2
这就是卸载所有版本libv8然后重新安装的原因therubyracer.因为所有的版本libv8是没有方法include_path完全去除,libv8这确实有方法include,当你重新安装的路径重新安装therubyracer.
Abe*_*llo 15
考虑到没有,如果上面100%对我有用,我想我会发布做什么(作为rails项目的一部分):
gem uninstall libv8
bundle update therubyracer
Run Code Online (Sandbox Code Playgroud)
这确保我获得了最新therubyracer版本,也是最新版本libV8,并且似乎解决了我遇到的多个问题,从缺少libv8.a文件到未定义的方法.
szp*_*pas 12
最后我使用了therubyracer 0.11.0beta5作为解决方案.
使用therubyracer(0.11.0beta5)
在Gemfile上添加以下内容
gem 'therubyracer', '~> 0.11.0beta5'
group :libv8 do
gem 'libv8', "~> 3.11.8"
end
Run Code Online (Sandbox Code Playgroud)
然后 bundle install
Mac OSX 10.8 Moutain Lion
cwd*_*cwd 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
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅此问题.
你可能不需要-- --with-system-v8在最后一行,但我这样做只是为了安全,因为我看到它Fetching: libv8-3.11.8.17-x86_64-darwin-13.gem (1%)在我运行命令时开始做...
无论如何,当所有其他事情都没有时,它对我有用.
对于任何试图自己升级的时候在Mac OSX 10.8山狮遇到此问题的Gemfile用gem 'therubyracer', '0.11.0',只是系统升级libv8宝石为我工作(无需任何其他宝石的卸载):
$ gem update libv8
$ bundle install
Run Code Online (Sandbox Code Playgroud)
如果您使用Travis-CI(或其他服务器上的其他CI工具,我假设),您还需要明确地将libv8gem 添加到您的Gemfile中:
的Gemfile
gem 'libv8', '3.11.8.3'
Run Code Online (Sandbox Code Playgroud)
然后bundle install像往常一样.请注意,安装libv8可能需要花费大量时间,而且我注意到它可能最终导致超过Travis CI的超时限制,从而导致构建失败.您可以稍微缓解这一点,不包括构建中的开发环境gem:
.travis.yml
# ...
bundler_args: --binstubs=./bundler_stubs --without development
Run Code Online (Sandbox Code Playgroud)
是的,几乎所有我的Travis构建超时并因此而失败.如果有人知道解决这个问题的方法(我希望"降级therubyracer"是最后的手段),请发表评论!
这可能不适用于所有应用程序,但似乎我的Rails 3.2.9应用程序实际上并不需要therubyracer或libv8毕竟.从我的Gemfile中删除那些宝石后,我确认我的规格已经通过,再次推送到Travis并且它已成功构建.所以,我想摆脱那些宝石(如果你不确定你真的需要它们)至少值得一试.
感谢Paul Annesley确认如果您使用的是Mac OS X 10.8 Mountain Lion,那么您根本不需要 therubyracergem,因为操作系统已经捆绑了Apple JavaScriptCore,它是自己的Javascript跑步者.在最初答案的时候,我在Snow Leopard上,因此需要它.
| 归档时间: |
|
| 查看次数: |
41162 次 |
| 最近记录: |