在mac-therubyracer上运行“bundle install”时出错,无法安装

时间:2013-12-07 14:55:01

标签: ruby-on-rails macos rubygems osx-mavericks

我正在尝试在运行 OS X 10.9 (Mavericks)的新macbook pro上首次安装rails,我遇到了安装 therubyracer 的问题。当我做“捆绑安装”时,我收到此错误:

  

安装therubyracer(0.10.2)时发生错误,而Bundler则不能   继续。   在捆绑之前确保gem install therubyracer -v '0.10.2'成功。

然后我按照他们的指示运行

gem install therubyracer -v '0.10.2'

然后我收到此错误消息:

  

构建原生扩展。这可能需要一段时间......   错误:安装therubyracer时出错:       错误:无法构建gem原生扩展。

     

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb

     

在-lobjc中检查main()...是的   创建Makefile

     

制作“DESTDIR =”   编译rr.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   rr.cpp:48:1:警告:控制到达非空函数的末尾[-Wreturn-type]   }   ^   产生1个警告。   编译v8.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   编译v8_array.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   编译v8_callbacks.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   编译v8_context.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   编译v8_date.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   编译v8_debug.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   编译v8_exception.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   v8_exception.cpp:10:16:警告:未使用的变量'stack'[-Wunused-variable]     static void * stack [20];                  ^   产生1个警告。   编译v8_external.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   v8_external.cpp:10:9:警告:未使用的变量'references'[-Wunused-variable]     VALUE引用;           ^   产生1个警告。   编译v8_function.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   编译v8_handle.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   编译v8_locker.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   v8_locker.cpp:45:5:警告:控制到达非空函数的末尾[-Wreturn-type]       }       ^   v8_locker.cpp:85:5:警告:控制到达非空函数的末尾[-Wreturn-type]       }       ^   产生了2个警告。   编译v8_message.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   编译v8_object.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   v8_object.cpp:77:19:警告:未使用的变量'proto'[-Wunused-variable]       处理原型(rr_rb2v8(原型));                     ^   产生1个警告。   编译v8_script.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   编译v8_string.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   编译v8_template.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   编译v8_try_catch.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   v8_try_catch.cpp:15:14:警告:将类型'v8 :: TryCatch *'的指针从常量布尔表达式初始化为null [-Wbool-conversion]         返回false;                ^ ~~~~   产生1个警告。   编译v8_v8.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   编译v8_value.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   v8_value.cpp:100:9:警告:未使用的函数'ToInt32'[-Wunused-function]     VALUE ToInt32(VALUE self){           ^   产生1个警告。   编译v8_weakref.cpp   clang:warning:编译过程中未使用的参数:' - undynamic'   链接共享对象v8.bundle   clang:错误:没有这样的文件或目录:'/ Library/Ruby/Gems/2.0.0/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a'   make: * [v8.bundle]错误1

     

Gem文件将保留在/Library/Ruby/Gems/2.0.0/gems/therubyracer-0.10.2中以供检查。   结果记录到/Library/Ruby/Gems/2.0.0/gems/therubyracer-0.10.2/ext/v8/gem_make.out

我不确定这意味着什么,或者如何解决这个问题。

我真正想做的就是运行我的rails项目。

任何人都知道这是什么问题?

9 个答案:

答案 0 :(得分:11)

这样做:

$ gem uninstall libv8 # ignore if this fails
$ gem install libv8 -v 3.16.14.3 -- --with-system-v8 # 2013-08 x86_64-darwin-12 (32.6 MB)

同时修改Gemfile并强制使用较新版本的therubyracer

gem "therubyracer", "~> 0.12"

然后再试一次:

$ bundle update

答案 1 :(得分:3)

标准是您不使用系统ruby,并且有理由说明原因。虽然您可能能够修复系统ruby上的这个特定问题,但是使用像RVM或rbenv这样的ruby-manager并与homebrew一起使用,您将能够快速解决任何依赖性问题。

这可能是一个漫长的过程,因为您首先需要从Xcode安装Xcode和其他命令行工具。完成之后,你需要得到红宝石经理。

我非常喜欢来自thinkbot的这个shell脚本,它使用rbenv - https://github.com/thoughtbot/laptop

然后运行思想机器人脚本。一旦你开始它将需要一段时间。所以去煮一些咖啡吧。这将安装自制程序,rbenv并设置所有内容。

重新启动终端后,它应该加载新的bash_profile zsh。运行'rbenv --help'列出命令。例如,您可以使用命令“rbenv versions”查看计算机上可用的内容。或者要安装'rbenv install 2.0.0-p353'然后在全局设置ruby版本,您可以使用'rbenv global 2.0.0-p353或您正在使用的任何当前版本。

并且您希望保持最新的补丁,其中一些是安全补丁。这是经理的另一个原因。因此,您可以轻松地将您的系统更新到最新和最好!随着时间的推移,您的新项目将获得更新的版本,您的旧项目将需要旧版本。不要与补丁混淆,例如从ruby 1.9迁移到ruby 2.0。这个变化非常重要,因为有些项目从使用rails 3的ruby 1.9升级到ruby 2.0和rails 4是不切实际的。所以当升级发生时,我必须切换我的ruby版本来运行应用程序并进行更改。所以就这么做吧。远离系统红宝石。

答案 2 :(得分:2)

这在MAC中适用于我

$ gem uninstall libv8
$ gem install therubyracer

然后尝试

bundle install
  

P.S。发布答案,以便将来帮助其他人。

答案 3 :(得分:1)

像魅力一样工作!谢谢https://stackoverflow.com/a/58842254/642616

$ brew install v8@3.15
$ bundle config build.libv8 --with-system-v8
$ bundle config build.therubyracer --with-v8-dir=$(brew --prefix v8@3.15)
$ bundle install

@ 3.15可以用任何其他版本替换。

答案 4 :(得分:0)

今天,我失去了很多时间来解决这个问题

  

因为libv8是therubyracer使用的V8引擎的接口,所以即使已经安装了V8,也可能需要使用libv8。

来自gihub


这对我有什么帮助
如果您使用bundler
bundle config build.libv8 --with-system-v8
如果您使用rubygems
gem install libv8 -- --with-system-v8
this

答案 5 :(得分:0)

这样做可以解决我的问题:

Gemfile

gem 'therubyracer'

并在

Terminal

gem uninstall libv8 [mention version if required]
bundle install

答案 6 :(得分:0)

当我从OSX Mountain Lion升级到OSX Mavericks时,我遇到了同样的问题。

从ruby-1.8.7-p354升级到ruby-1.8.7-375让我获得libv8和therubyracer gem

假设rbenv:

rbenv install 1.8.7-p375
rbenv rehash
rbenv global 1.8.7-p375
bundle install

答案 7 :(得分:0)

从OS X Mountain Lion升级到OS X Mavericks时,我遇到了同样的问题。

我遵循了以下步骤:

  1. brew install v8
  2. gem install libv8 -v '3.16.14.3' -- --with-system-v8
  3. gem install therubyracer -v '0.12.3' --source 'https://rubygems.org/'可能会产生错误,请放心
  4. bundle config build.therubyracer --with-v8-dir=$(brew --prefix v8@3.15)
  5. “捆绑安装”-就我而言,这不是必需的,但对于您而言,可能是

答案 8 :(得分:0)

我更改了我的 ruby​​ 版本,它在 macos big sur 中工作。

  1. rvm list rubies
    • 我使用的是 2.6.1,但需要 2.3.7
  2. rvm use 2.3.7
    • 如果未安装,请先运行 rvm install 2.3.7

rvm basics here other helpful rvm commands