【问题标题】:Bundle (or rake, or rails) pretends to use the system version of RubyBundle(或 rake,或 rails)假装使用 Ruby 的系统版本
【发布时间】:2013-09-01 21:50:46
【问题描述】:

我的 Linux 系统中安装了旧的 ruby​​:

% ruby -v
ruby 1.9.2p188 (2011-03-28) [x86_64-linux-gnu]

我的主目录中安装了一个较新的 ruby​​:

% ~/ruby/bin/ruby -v
ruby 1.9.3p448 (2013-06-27) [x86_64-linux]

但不知何故,bundler(或 rake 或 rails)在某个步骤上运行旧 ruby​​ 并得到:

% ~/ruby/bin/bundle exec rake

Rails 4 prefers to run on Ruby 2.0.

You're running
  ruby 1.9.2p188 (2011-03-28) [x86_64-linux-gnu]

Please upgrade to Ruby 1.9.3 or newer to continue.

为什么?我该怎么办?

这是它的底层功能:

% strace -f -e trace=process ~/ruby/bin/bundle exec rake
execve("/home/ilyak/ruby/bin/bundle", ["/home/ilyak/ruby/bin/bundle", "exec", "rake"], [/* 32 vars */]) = 0
clone(Process 6460 attached
child_stack=0x7ffeb759cff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7ffeb759d9d0, tls=0x7ffeb759d700, child_tidptr=0x7ffeb759d9d0) = 6460
[pid  6460] _exit(0)                    = ?
[pid  6460] +++ exited with 0 +++
execve("/usr/bin/rake", ["rake"], [/* 37 vars */]) = 0

为什么?他们在想什么?

【问题讨论】:

    标签: ruby-on-rails rake bundler ruby-on-rails-4


    【解决方案1】:

    我目前的解决方法是

    export PATH=/home/ilyak/ruby/bin:$PATH
    

    但显然它并不酷。

    【讨论】:

    • 这有什么问题?当您运行 bundle 或任何可执行脚本时,您的系统会查看脚本文件顶部的 #! 行以确定要运行的命令。你可以通过运行head -n 1 $(which bundle) 看到这一点。它很可能包含类似 #!/usr/bin/env ruby 的内容,用于在您的路径中搜索 ruby 命令。
    【解决方案2】:

    我不确定这里发生了什么,但建议您删除所有 rubies 痕迹并使用 ruby​​ 版本管理器(例如 rvm、rbenv 或 chruby)重新开始。 (我推荐 chruby:https://github.com/postmodern/chruby)这应该会理顺您的多个 ruby​​ 版本,并首先避免该问题。

    【讨论】:

    • 我试过 RVM,但它似乎不支持我晦涩难懂的发行版,所以我想我坚持 PATH 操作:-/
    猜你喜欢
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    相关资源
    最近更新 更多