【问题标题】:train wreck. Rails requires RubyGems >= 1.3.2火车失事。 Rails 需要 RubyGems >= 1.3.2
【发布时间】:2010-03-11 02:46:03
【问题描述】:

Update II 问题已解决,但为什么?这是有史以来最令人头疼的问题。我的问题解决了,但是我不知道我是如何完成这项任务的。加上以下结果没有意义。我的 .profile 路径 (/usr/local/bin) 与当前工作的路径 (/usr/bin/) 不同。我在OSX雪豹中关闭终端后突然出现了工作路径。这是怎么回事?

这是工作路径和令人困惑的 .profile 文件:

$ rails -v
Rails 3.0.0.beta
$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]
$ gem -v
1.3.6
$ whereis ruby
/usr/bin/ruby
$ whereis rails
/usr/bin/rails
$ whereis gem
/usr/bin/gem
$ which gem
/usr/bin/gem
$ which ruby
/usr/bin/ruby
$ which rails
/usr/bin/rails
$ mate ~/.profile

.profile 文件:

export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH"
if [[ -s /Users/justinz/.rvm/scripts/rvm ]] ; then source /Users/justinz/.rvm/scripts/rvm ; fi

更新我注意到 which ruby​​ 和 whereis ruby​​ 是不同的位置

which ruby
/opt/local/bin/ruby
whereis ruby
/usr/bin/ruby

我最近将 ruby​​ 升级到了ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin10],我想我打破了轨道。当我尝试加载导轨时。我收到一条奇怪的消息。请帮忙!

$ ruby​​ 脚本/服务器 Rails 需要 RubyGems >= 1.3.2。请安装 RubyGems 并重试:http://rubygems.rubyforge.org

$ which ruby
/usr/local/bin/ruby
$ whereis ruby
/usr/bin/ruby
$ which rails
/usr/local/bin/rails
$ whereis rails
/usr/bin/rails
$ which gem
/usr/local/bin/gem
$ whereis gem
/usr/bin/gem
$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin10.2.0]
$ rails -v
Rails 2.3.5
$ gem list

*** LOCAL GEMS ***

actionmailer (2.3.5)
actionpack (2.3.5)
activerecord (2.3.5)
activeresource (2.3.5)
activesupport (2.3.5)
builder (2.1.2)
bundler (0.9.11)
columnize (0.3.1)
erubis (2.6.5)
fastercsv (1.5.1)
ffi (0.6.3)
gbarcode (0.98.16)
i18n (0.3.5)
linecache (0.43)
mail (2.1.3)
memcache-client (1.8.0)
prawn (0.8.4)
prawn-core (0.8.4)
prawn-layout (0.8.4)
prawn-security (0.8.4)
rack (1.1.0, 1.0.1)
rack-mount (0.6.1)
rack-test (0.5.3)
rails (2.3.5)
rake (0.8.7)
ruby-debug (0.10.3)
ruby-debug-base (0.10.3)
rubygems-update (1.3.6)
sqlite3 (0.0.8)
text-format (1.0.0)
thor (0.13.4)
tzinfo (0.3.17)
$ sudo gem install sqlite3-ruby
Password:
Building native extensions.  This could take a while...
ERROR:  Error installing sqlite3-ruby:
    ERROR: Failed to build gem native extension.

/usr/local/bin/ruby extconf.rb
checking for fdatasync() in -lrt... no
checking for sqlite3.h... yes
checking for sqlite3_open() in -lsqlite3... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/usr/local/bin/ruby
    --with-sqlite3-dir
    --without-sqlite3-dir
    --with-sqlite3-include
    --without-sqlite3-include=${sqlite3-dir}/include
    --with-sqlite3-lib
    --without-sqlite3-lib=${sqlite3-dir}/lib
    --with-rtlib
    --without-rtlib
    --with-sqlite3lib
    --without-sqlite3lib


Gem files will remain installed in /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5 for inspection.
Results logged to /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/ext/sqlite3_api/gem_make.out

【问题讨论】:

  • 我应该添加我已经尝试过 sudo gem update --system
  • 你当前运行的是什么版本的 ruby​​ gems (gem -v)
  • 我现在正面临同样的问题!

标签: ruby-on-rails


【解决方案1】:

您是否查看过 Ruby 版本管理器或 rvm (http://rvm.beginrescueend.com/)。我知道它可以在 linux 和 Mac OS X 上运行。

基本上,它是一个管理不同版本的 ruby​​ 及其所有相关“部分”的工具。当朋友推荐我尝试时,我遇到了类似的问题,它为我解决了。

【讨论】:

    【解决方案2】:

    我刚刚解决了同样的问题。我不确定它是最有效的,但我按照hivelogic 的详细说明从头开始重建所有内容,将 ruby​​ 和 ruby​​ gem 安装到“/usr/local”

    记得改变我的路径:

    export PATH=/usr/local/bin:$PATH
    

    【讨论】:

    • 你能解释一下导出路径吗?如何改变它?我按照雪豹安装的所有步骤进行操作,最初它可以工作,然后重新启动我遇到了同样的问题。
    • 路径基本上是当您键入命令以获取有关如何处理这些命令的说明时 shell/终端程序所显示的位置。当您从教程中重建 ruby​​ 时,它会将所有内容都安装在 /usr/local 中,所以在这里您将它添加到它检查的目录列表中,因此它首先会在那里查找。
    • 如果您在终端中键入导出命令,它只存在于该会话中,这就是为什么您将这一行添加到主目录中 .profile 或 .bash_login 文件的末尾,这样每次您启动终端它会加载命令,但我想你也可以在每次启动 shell 时手动输入导出命令..
    • 您可以通过键入“echo $PATH”来检查以确保您已正确添加它,首先应该是 /usr/local/bin,然后是其他一些路径。它从左到右检查目录。祝你好运。
    【解决方案3】:

    如果您在 Mac 上运行此程序(我从跟踪中出现的“达尔文”猜测),如果您有时输入 gem whatever 而不是 @987654322,有时可能会遇到这样的问题@。检查您的 ~/.gem 或 ~/.gems 目录,看看是否有任何 gem 被意外安装到那里。

    如果是这样,请删除/重新安装它们。

    【讨论】:

      【解决方案4】:

      我不完全确定我是否记得前一段时间,但我想我从 Rails 2.3.4 升级到 Rails 2.3.5 时遇到了类似的问题。在那种情况下,我认为问题是由同时安装了 Rack 1.1.0 和 Rack 1.0.1 引起的(在 Rails 升级期间安装了 Rack 1.1.0)。我摆脱了 1.1.0,一切又开始工作了。

      当我从 Ruby 1.8.6 升级到 Ruby 1.8.7(在 Windows 上)时,我没有遇到任何问题。

      我可能是错的,但也许这至少会给你一个新的尝试方向。

      【讨论】:

        【解决方案5】:

        其实我也遇到了这个问题。我的是升级红宝石引起的。我从运行 Ruby 1.8.6 的有点旧的 EC2 AMI 开始,我想在更新的 1.8.7 上运行。我下载并编译了最新的 1.8.7 Ruby,删除了我的 1.8.6 的链接(这是一个 Debian 服务器,所以 /usr/bin/ruby 是 /usr/bin/ruby1.8 的符号链接,请注意这一点),并让新的 Ruby 从 /usr/local/bin/ruby 运行。没关系。但后来我开始遇到奇怪的行为,包括前面提到的“Rails 需要 RubyGems >= 1.3.2”错误。以下是我最终需要检查和做的事情,其他人可能会有所不同,但希望这会有所帮助:

        • 我删除了 ruby​​gems 并重新安装:“apt-get remove ruby​​gems”,然后从 ruby​​forge 下载并安装。这可能不是完全需要的,但我想确保事情是干净的。请记住,gem 与您的 ruby​​ 版本相关联,因此升级后您可能需要重新安装所有 gem。我不确定是否有解决方法,但我很想知道是否有。

        • 就我而言,我作弊了。由于我从 1.8.6 -> 1.8.7 开始,我决定尝试将 gem 从旧 Ruby 位置复制到新位置:“cp -R /usr/lib/ruby/gems/1.8 /usr/local/库/红宝石/宝石”。它对我有用,但我仍在测试,可以想象这样做可能会遇到问题,所以要小心。当然,这肯定比重新安装所有东西更方便。

        • 我正在使用 nginx 运行乘客。在Passenger 配置中,它将包含指向Ruby 二进制文件和Passenger gem 的条目。一定要改变这些!我花了几分钟想知道我的应用程序是如何正常启动的,即使 gems 已经消失了……这是因为 nginx 的配置仍然直接指向 /usr/bin/ruby1.8 -- 哎呀。

        希望此信息对某人有所帮助。

        【讨论】:

          【解决方案6】:

          您需要在两个不同的目录之间创建一个符号链接。

          sudo ln -s /opt/local/bin/ruby /usr/bin/ruby

          【讨论】:

          • 坏主意。看起来他使用的是 Mac,这样做会破坏系统安装的 Ruby,这可能会导致其他地方出现问题。
          • 我应该怎么做才能撤消这个命令?我昨天执行了它:(
          • @JZ 撤消命令 sudo rm -rf /usr/bin/ruby @mipadi 我知道他在 Mac 上。我之前在我的 mac 机器上执行过同样的命令,它运行良好。当它所做的只是创建指向目录的链接时,我看不出它是如何导致问题的,它实际上并没有移动任何文件或文件夹。那么问题会从哪里来呢?他一定使用了我告诉他无论如何都要使用的命令,因为看起来问题已经解决了。你完全不知道你在说什么。
          • /usr/bin/ruby 不是目录,它是指向 Ruby 可执行文件的链接。它可能不会引起问题,但它可能 -- /usr/bin/ruby 链接到 Apple 系统 Ruby,某些系统实用程序(现在或将来)可能会使用它;如果 MacPorts 版本不同,这可能会导致问题。通过sudo rm --f /usr/bin/ruby 对其进行攻击也可能会导致问题。您不应该更改或删除系统二进制文件,至少要说明用户正在做什么以及可能出现的问题。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-04
          • 2011-09-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多