繁体   English   中英

在 mac 上运行“bundle install”时出错 - therubyracer 安装失败

[英]Error when running “bundle install” on mac - therubyracer failing to install

我第一次尝试在运行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:警告:编译期间未使用的参数:'-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 引用; ^ 1 警告已生成。 编译 v8_function.cpp clang:警告:编译期间未使用的参数:'-rdynamic' 编译 v8_handle.cpp clang:警告:编译期间未使用的参数:'-rdynamic' 编译 v8_locker.cpp clang:警告:编译期间未使用的参数:'-rdynamic ' v8_locker.cpp:45:5:警告:控制到达非空函数[-Wreturn-type]的结尾} ^ v8_locker.cpp:85:5:警告:控制到达非空函数的结尾[-Wreturn-type] ] } ^ 2 个警告生成。 编译 v8_message.cpp clang:警告:编译期间未使用的参数:'-rdynamic' 编译 v8_object.cpp clang:警告:编译期间未使用的参数:'-rdynamic' v8_object.cpp:77:19:警告:未使用的变量 'proto' [ -Wunused-variable] 处理 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 -转换]返回假; ^~~~~ 产生了 1 个警告。 编译 v8_v8.cpp clang:警告:编译期间未使用的参数:'-rdynamic' 编译 v8_value.cpp clang:警告:编译期间未使用的参数:'-rdynamic' v8_value.cpp:100:9:警告:未使用的函数 'ToInt32' [ -Wunused-function] VALUE ToInt32(VALUE self) { ^ 1 警告生成。 编译 v8_weakref.cpp clang:警告:编译期间未使用的参数:'-rdynamic' 链接共享对象 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 项目。

有谁知道是什么问题?

这样做:

$ 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

像魅力一样工作! 谢谢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 可以替换为任何其他版本。

标准是您不使用系统红宝石,这是有原因的。 尽管您可能能够在系统 ruby​​ 上解决这个特定问题,但使用 RVM 或 rbenv 等 ruby​​ 管理器并与自制软件一起使用,您将能够快速解决任何依赖性问题。

这可能是一个漫长的过程,因为您首先需要从 Xcode 安装 Xcode 和其他命令行工具。 完成后,您需要获取 ruby​​-manager。

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

然后运行thoughtbot脚本。 一旦你开始,它会需要一段时间。 所以去泡杯咖啡吧。 这将安装自制软件、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 升级到带有 rails 3 的 ruby​​ 2.0 和 rails 4 是不切实际的。所以当升级发生时,我必须切换我的 ruby​​ 版本来运行应用程序并进行更改。 所以就去做吧。 远离系统红宝石。

这在 MAC 中对我有用

$ gem uninstall libv8
$ gem install therubyracer

然后试试

bundle install

PS 发布答案,以便将来可以帮助其他人。

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

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

来自gihub


这就是帮助我的原因
如果你使用bundler
bundle config build.libv8 --with-system-v8
如果你使用rubygems
gem install libv8 -- --with-system-v8

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

Gemfile

gem 'therubyracer'

而在

Terminal

gem uninstall libv8 [mention version if required]
bundle install

当我从 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

当我从 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' - 在我的情况下这不是必需的,但它可能在你的情况下

我更改了我的 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 install 2.3.7

rvm 基础知识其他有用的 rvm 命令

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM