在 Mac 上运行 "bundle install" 出错 - 安装 therubyracer 失败

7
我正在尝试在我的新MacBook Pro上安装Rails,它运行着OS X 10.9(Mavericks),但我在安装therubyracer时遇到了问题。当我执行"bundle install"命令时,会出现以下错误信息:
"An error occurred while installing therubyracer (0.10.2), and Bundler cannot continue. Make sure that gem install therubyracer -v '0.10.2' succeeds before bundling."
然后我按照指示运行了:
"gem install therubyracer -v '0.10.2'"
然而,我又收到了以下错误信息:
构建本地扩展。这可能需要一段时间... 错误:安装therubyracer时出错: 错误:无法构建宝石原生扩展。 /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb 检查是否在-lobjc中存在main()... 创建Makefile make "DESTDIR=" 编译rr.cpp clang:警告:编译期间未使用参数:'-rdynamic' rr.cpp:48:1: 警告:控件到达非void函数的结尾[-Wreturn-type] } ^ 1个警告生成。 编译v8.cpp clang:警告:编译期间未使用参数:'-rdynamic' 编译v8_array.cpp clang:警告:编译期间未使用参数:'-rdynamic' 编译v8_callbacks.cpp clang:警告:编译期间未使用参数:'-rdynamic' 编译v8_context.cpp clang:警告:编译期间未使用参数:'-rdynamic' 编译v8_date.cpp clang:警告:编译期间未使用参数:'-rdynamic' 编译v8_debug.cpp clang:警告:编译期间未使用参数:'-rdynamic' 编译v8_exception.cpp clang:警告:编译期间未使用参数:'-rdynamic' v8_exception.cpp:10:16: 警告:未使用的变量'stack'[-Wunused-variable] static void* stack[20]; ^ 1个警告生成。 编译v8_external.cpp clang:警告:编译期间未使用参数:'-rdynamic' v8_external.cpp:10:9: 警告:未使用的变量'references'[-Wunused-variable] VALUE references; ^ 1个警告生成。 编译v8_function.cpp clang:警告:编译期间未使用参数:'-rdynamic' 编译v8_handle.cpp clang:警告:编译期间未使用参数:'-rdynamic' 编译v8_locker.cpp clang:警告:编译期间未使用参数:'-rdynamic' v8_locker.cpp:45:5: 警告:控制到达非void函数的结尾[-Wreturn-type] } ^ v8_locker.cpp:85:5: 警告:控制到达非void函数的结尾[-Wreturn-type] } ^ 2个警告生成。 编译v8_message.cpp clang:警告:编译期间未使用参数:'-rdynamic' 编译v8_object.cpp clang:警告:编译期间未使用参数:'-rdynamic' v8_object.cpp:77:19: 警告:未使用的变量'proto'[-Wunused-variable] Handle proto(rr_rb2v8(prototype)); ^ 1个警告生成。 编译v8_script.cpp clang:警告:编译期间未使用参数:'-rdynamic' 编译v8_string.cpp clang:警告:编译期间未使用参数:'-rdynamic' 编译v8_template.cpp clang:警告:编译期间未使用参数:'-rdynamic' 编译v8_try_catch.cpp clang:警告:编译期间未使用参数:'-rdynamic' v8_try_catch.cpp:15:14: 警告:从常量布尔表达式中的指针类型'v8 :: TryCatch *'初始化为null[-Wbool-conversion] return false; ^ ~~~~ 1个警告生成。 编译v8_v8.cpp clang:警告:编译期间未使用参数:'-rdynamic' 编译

我不太确定这是什么意思,也不知道如何解决。

我只想运行我的Rails项目。

有人知道问题出在哪里吗?


你是否正在使用RVM?如果没有->强烈推荐! - Severin
我没有使用RVM。 :-( 这会解决我的问题吗? - Amir
很有可能会成功,因为它会为您处理许多后台配置。 - Severin
问题不在于 RVM,而是在于 libv8 - Roman Kiselenko
10个回答

13

这样做:

$ 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

抱歉,这个无法运行。当我执行“bundle install”命令时,出现了相同的错误,而且在尝试安装“therubyracer”时也遇到了相同的错误。 - Amir
1
没关系,你在问题中添加了更多内容。这个方法有效!谢谢! - Amir
2
@Amir,很高兴听到你解决了问题,但我鼓励你阅读我的帖子,了解之前建议使用类似rvm的东西的原因。 - nil

10

太棒了!谢谢 https://dev59.com/AGIk5IYBdhLWcg3wG63b#58842254

$ 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 可以替换为任何其他版本。


这对我有效,Ruby 2.3.8,Rails 3.2.11 - Fatima
谢谢,这对我很有帮助。在 M1 Mac、Big Sur 上运行 Ruby 2.5.3,Rails 5.2.1 成功了。 - iamse7en

3

这在我的MAC上有效

$ gem uninstall libv8
$ gem install therubyracer

那么,请尝试。
bundle install

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

3
标准做法是不要使用系统自带的Ruby,原因是有些问题可能会得不到解决。虽然你可能能够在系统自带的Ruby上解决某些问题,但使用像RVM或rbenv这样的Ruby管理器和Homebrew一起使用,您就可以快速解决任何依赖问题。
这可能需要一些时间,因为您首先需要安装Xcode以及来自Xcode的其他命令行工具。安装完成后,您需要获取Ruby管理器。
我真的很喜欢thoughtbot的这个shell脚本,它使用的是rbenv- https://github.com/thoughtbot/laptop 之后运行thoughtbot脚本。一旦开始,它将需要一段时间。所以去泡杯咖啡吧。这将安装Homebrew、rbenv并设置一切内容。
重新启动终端,它应该加载您的新bash_profile zsh。运行“rbenv --help”列出命令。例如,您可以使用命令“rbenv versions”查看计算机上可用的版本。或者安装“rbenv install 2.0.0-p353”,然后使用“rbenv global 2.0.0-p353”或其他当前版本来全局设置Ruby版本。
您还需要保持补丁程序更新,其中一些是安全补丁程序。这是另一个使用管理器的原因。这样您就可以轻松地将系统更新为最新版本!随着时间的推移,您的新项目会使用新的Ruby版本,而旧项目则需要旧版本。不要与补丁混淆,例如从Ruby 1.9到Ruby 2.0的转换。这种变化足够显著,以至于对于一些从Ruby 1.9和Rails 3升级到Ruby 2.0和Rails 4不切实际的项目来说,当升级发生时,我必须切换我的Ruby版本才能运行应用程序并进行更改。所以,赶紧行动起来吧,远离系统自带的Ruby。

2
谢谢,我会花些时间使用 RVM 而不是系统自带的 Ruby。 - Amir
@Amir,我鼓励你尝试一下thoughtbot脚本。它会节省你很多时间。它使用rbenv,这是我之前没有尝试过的。我曾经在vps上使用rvm,但我发现我更喜欢rbenv。我对在osx上安装ruby的过程感到非常厌倦,而这使得体验更好。如果你没有偏好,就使用脚本和rbenv吧。 - nil
我会查看脚本和rbenv。希望它能让设置变得容易。我不喜欢这个过程花费我太长时间来设置我的Rails项目。 - Amir
1
只是想告诉你,我已经转而使用RVM了。 :-) - Amir
我使用rbenv,但仍然遇到了这个问题。 - sixty4bit
显示剩余2条评论

1

当我从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. 'bundle install' - 在我的情况下不需要,但在你的情况下可能需要

1

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

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

来自gihub


这就是帮助我的方法:
如果您使用,
bundle config build.libv8 --with-system-v8
如果您使用rubygems
gem install libv8 -- --with-system-v8
this


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

0

只需这样做即可解决我的问题:

Gemfile

gem 'therubyracer'

而且在

终端

gem uninstall libv8 [mention version if required]
bundle install

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基础知识 其他有用的rvm命令


0

brew install v8@3.15不起作用。

Homebrew已经禁用了v8@3.15 -> https://formulae.brew.sh/formula/v8@3.15

我有一个简单的解决方案,你可以使用这个链接下载官方的v8内容https://github.com/v8/v8/archive/3.15.11.18.tar.gz

这个内容应该复制到usr/local/opt/

注意:你可以将文件夹重命名为v8@3.15。

在重命名文件夹后,你可以运行以下命令:

bundle config build.therubyracer --with-v8-dir=/usr/local/opt/v8@3.15/

希望这个能行,编码愉快!

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