在OSX 10.11 El Capitan上安装therubyracer gem

28

bundle install 失败,提示需要先成功运行 gem install therubyracer -v '0.12.1'

gem install therubyracer -v '0.12.1' 失败,似乎与编译有关

此前,libv8 gem 出现问题,但是通过遵循 SO 的帖子已经安装成功。

针对修复 Mavericks 中 rubyracer 的指南似乎不起作用,因为 El Capitan 有所更改?

ln: /usr/bin/cpp: Operation not permitted 
10个回答

93
  1. 通过应用商店安装Xcode
  2. 为Xcode安装'命令行工具' (xcode-select --install)
  3. 如果使用rbenv,在安装ruby之后你需要运行rbenv rehash
  4. 假设你已经运行了gem install bundler并出现了错误,请清除混乱:

    gem uninstall libv8
    gem uninstall therubyracer
    brew rm v8
    
  5. 安装gcc4.2

  6. brew tap homebrew/dupes
    brew install apple-gcc42
    
  7. 安装v8

    brew tap homebrew/versions
    brew install v8-315
    brew link --force v8-315
    
  8. 安装 gem

  9. gem install libv8 -- --with-system-v8
    gem install therubyracer
    

    如果您遇到 dyld: lazy symbol binding failed: Symbol not found 错误,@rpbaltazar建议采用另一种方法:

    如果您遇到 dyld:lazy symbol binding failed:Symbol not found 错误,则@rpbaltazar建议使用替代方法:

    bundle config --local build.libv8 --with-cxx=/usr/local/bin/g++-4.2
    bundle install
    

1
这对我解决了问题。在尝试了其他几种复杂的方法之后,我认为这个答案的关键区别就是提供了“旧”的编译器(GCC)。谢谢。 - Aeschylus
1
我只需要完成第七步。 - Catfish
1
有着巨大的痛苦,然后出现了这个答案。谢谢! - don.najd
1
我撤回之前的说法...现在我遇到了一个不同的错误dyld: 惰性符号绑定失败:找不到符号:_ZN2v82V821AddGCPrologueCallbackEPFvNS_6GCTypeENS_15GCCallbackFlagsEES1 引用自:/development/opensource/rails-loaded/vendor/ruby/2.1.0/extensions/x86_64-darwin-15/2.1.0-static/therubyracer-0.12.2/v8/init.bundle 应在:平面命名空间中找到期望的内容 - don.najd
@don.najd 我也遇到了同样的问题。你解决了吗? - Saurabh Nanda
显示剩余7条评论

51

我仍然对@xxjjnn的回答有疑问。来自Github的以下回答解决了我的问题。 我目前的设置: El Capitan 10.11.4和Xcode 7.3。

brew tap homebrew/versions
brew install v8-315

gem install libv8 -v '3.16.14.13' -- --with-system-v8
gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315

bundle install

在 El Capitan 10.11.3 上工作过。 - Conor
2
在 OS X 10.11.4 上使用 Ruby 2.3.0 和 Rails 4.2.6 进行开发 - 进程 - DogEatDog
1
在我的OS X 10.11.4 Ruby 2.3.0和Rails 4.2.6上也适用。我尝试了各种其他方法,但这是唯一一个在我升级到Ruby 2.3.0后解决了“therubyracer”编译问题的方法。 - smile2day
"gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315" 为我节省了时间! - mike927
尽管现在homebrew/versions已经没有用了,但是这个解决方案基本上对我在Catalina上起作用了,只需要做出以下更改:我必须指定libv8 3.16.14.19而不是3.16.14.13;并且--with-v8-dir=/usr/local/opt/v8@3.15而不是没有@符号。我在Catalina 10.15.2上使用的是Ruby 2.4.6和Rails 4.2.11.1。 - John Messenger

11

therubyracer的Github页面上提供的答案对我有效:

brew tap homebrew/versions
brew install v8-315
brew link --force v8-315
gem install libv8 -- --with-system-v8
gem install therubyracer

5

我将gem therubyracer更新到0.12.2版本,然后在Rails代码库中运行了以下命令:

$ brew install v8-315
$ bundle config --local build.libv8 --with-system-v8
You are replacing the current local value of build.libv8, which is currently nil
$ bundle config --local build.therubyracer --with-v8-dir=$(brew --prefix v8-315)
You are replacing the current local value of build.therubyracer, which is currently nil

最后

bundle install

这在Catalina macOS 10.15上运行正常,但在0.12.3上出现问题。 - Ram on Rails React Native

3

我知道这个问题是关于安装therubyracer -v '0.12.1',但解决方案实际上是升级到'0.12.2'版本。

我在几个项目中都遇到过这个问题,经常会忘记。最终想起来后,一切就正常了。

确保使用bundle config --delete build.libv8清除不再需要的内容。

这是有关此问题的gem存储库的讨论线程:https://github.com/cowboyd/therubyracer/issues/398#issuecomment-238161167


2

(为了易读性,作为评论发布,但这应该是原始接受答案的附加内容)

运行接受的答案后,我遇到了评论中描述的错误。

我发现对我有用的解决方案是运行以下命令:

gem uninstall libv8
gem uninstall therubyracer
bundle config --local build.libv8 --with-cxx=/usr/local/bin/g++-4.2
bundle install

请注意,所接受答案的初始步骤是必要的,即安装编译器。

我已经删除了 Ruby 版本,并且完全按照这些说明操作,但仍然出现“dyld: lazy symbol binding failed: Symbol not found”错误。@rpbaltazar 还有更多的见解吗? - equivalentideas
嘿,你遇到问题的是哪个版本?在El Capitan中,我按照描述的步骤可行。不幸的是,由于我自己没有遇到过这个问题,所以很难通过尝试和错误来解决这个问题的大部分内容。 - rpbaltazar

2

实际上,apple-gcc42 已从brew中删除:

apple-gcc42在提交bcba321ea中从homebrew/core中删除:

相反,我安装了gcc@4.9。所以,按照xxjjnn的答案,不要运行5,只需运行:

brew install gcc@4.9

1

首先尝试删除Gemfile.lock文件,然后再运行bundle install命令。Gemfile.lock文件会重新生成。

对于大多数El Capitan系统,这种方法都有效。

如果不这样做,将只安装Gemfile.lock中指定的版本。如果你删除了这个文件,bundle install将会获取最新的gem版本。


0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接