无法在OS X Mavericks上降级Ruby

时间:2022-09-19 00:15:27

OS X 10.9 comes with ruby 2.0.0p195 but I need to install Ruby 1.8.7. I keep running into errors. I have Xcode5-DP install and I believe Command Line Tools is installed too.

OS X 10.9附带ruby 2.0.0p195,但我需要安装Ruby 1.8.7。我一直遇到错误。我有Xcode5-DP安装,我相信也安装了命令行工具。

In the terminal:

在终端:

sudo rvm install 1.8.7
Searching for binary rubies, this might take some time.
No binary rubies available for: osx/10/x86_64/ruby-1.8.7-p371.
Continuing with compilation. Please read 'rvm mount' to get more information on binary rubies.
Installing requirements for osx, might require sudo password.
Certificates in '/usr/local/etc/openssl/cert.pem' already are up to date.
Installing Ruby from source to: /Users/alextoul/.rvm/rubies/ruby-1.8.7-p371, this may take a while depending on your cpu(s)...
ruby-1.8.7-p371 - #downloading ruby-1.8.7-p371, this may take a while depending on your connection...
ruby-1.8.7-p371 - #extracted to /Users/alextoul/.rvm/src/ruby-1.8.7-p371 (already extracted)
Patch stdout-rouge-fix was already applied.
Patch no_sslv2 was already applied.
ruby-1.8.7-p371 - #configuring...
Error running 'env CFLAGS=-O3 -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libxml2/include -I/usr/local/opt/libxslt/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl098/include LDFLAGS=-L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libxml2/lib -L/usr/local/opt/libxslt/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl098/lib ./configure --prefix=/Users/alextoul/.rvm/rubies/ruby-1.8.7-p371 --disable-install-doc --without-tcl --without-tk --enable-shared',
please read /Users/alextoul/.rvm/log/ruby-1.8.7-p371/1371228839_configure.log
There has been an error while running configure. Halting the installation.

1371228839_configure.log says:

./configure
configure: WARNING: unrecognized options: --without-tcl, --without-tk
checking build system type... i686-apple-darwin13.0.0
checking host system type... i686-apple-darwin13.0.0
checking target system type... i686-apple-darwin13.0.0
checking whether the C compiler works... no
configure: error: in `/Users/alextoul/.rvm/src/ruby-1.8.7-p371':
configure: error: C compiler cannot create executables
See `config.log' for more details

Other (useful) info:

其他(有用的)信息:

ruby -v
> ruby 2.0.0p195 (2013-05-14 revision 40734) [universal.x86_64-darwin13]
brew update
> Already up-to-date.
gcc --version
> Configured with: --prefix=/Applications/Xcode5-DP.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode5-DP.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1
> Apple LLVM version 5.0 (clang-500.1.58) (based on LLVM 3.3svn)
> Target: x86_64-apple-darwin13.0.0
> Thread model: posix
sudo rvm requirements
> Installing requirements for osx, might require sudo password.
> Certificates in '/usr/local/etc/openssl/cert.pem' already are up to date.

Thanks for your help.

谢谢你的帮助。

5 个解决方案

#1


13  

10.9 is an early beta build of the OS. [Edit: please note the July 2013 date of this answer] If I were running 10.9 I would assume I'll have to reinstall the operating system from scratch at least 2 more times. (At least once during the beta cycle because, well, it's beta, and once when 10.9 comes out in general release, because, well, beta).

10.9是OS的早期beta版本。 [编辑:请注意2013年7月的答案日期]如果我运行10.9我会假设我必须从头开始重新安装操作系统至少2次。 (在测试周期中至少有一次,因为,它是测试版,一旦10.9在一般版本中出现,因为,好吧,测试版)。

Given this I suggest four courses of action (pick 1 or many):

鉴于此,我建议采取四种行动方案(选择1个或多个):

  • Work with the RVM guys and dig into 10.9's probably-changed compiler environment and get Ruby 1.8.7 compiling. This is trickier because technically this stuff is under NDA.
  • 与RVM人员合作,深入研究10.9可能改变的编译器环境并获得Ruby 1.8.7编译。这比较棘手,因为从技术上讲,这些东西都在NDA之下。

  • Instead, set up a VM and run Ruby 1.8.7 on the VM. Bonus points for using Vagrant and Chef/Puppet, because you may even need to rebuild the VM. (Just keep the Vagrantfile and Puppet or Chef config files on Github/Dropbox/whatever so you can clone them and regenerate your VM from scratch.)
  • 相反,设置VM并在VM上运行Ruby 1.8.7。使用Vagrant和Chef / Puppet的加分点,因为您甚至可能需要重建VM。 (只需将Vagrantfile和Puppet或Chef配置文件保存在Github / Dropbox /中,这样就可以克隆它们并从头开始重新生成VM。)

  • OR simply reboot to 10.8 to get production work done. 10.8 is a production level OS, 10.9 should be treated with caution - it could eat your work. It really shouldn't be used for production purposes (aka: day to day writing Ruby code). If you're writing a 10.9 only app in Cocoa/Objective-C (or updating RubyMotion or something) that might be another thing (but I'd still keep good backups and treat it gently).
  • 或者只需重新启动到10.8即可完成生产工作。 10.8是生产级操作系统,10.9应该谨慎对待 - 它可能会吃掉你的工作。它实际上不应该用于生产目的(又名:日常编写Ruby代码)。如果你在Cocoa / Objective-C中编写一个仅有10.9的应用程序(或更新RubyMotion或其他东西)可能是另一回事(但我仍然保持良好的备份并轻轻地对待它)。

  • Work towards updating your code base for Ruby 2.0, as Ruby 1.8.7 is no longer officially supported anyway.
  • 努力更新Ruby 2.0的代码库,因为无论如何不再正式支持Ruby 1.8.7。

Edit (Oct 24, 2013): If you're here because you just installed Mavericks (released Oct 22, 2013), want to get Ruby 1.8.7 working a few days after this release, and RVM isn't working for you (because you're impatient and can't wait), here's what you can do (which should work, although I'm not an rbenv user):

编辑(2013年10月24日):如果您因为刚刚安装了Mavericks(2013年10月22日发布)而来到这里,那么希望在此版本发布后的几天内让Ruby 1.8.7正常运行,并且RVM不适合您(因为你不耐烦而且等不及了),这就是你可以做的事情(虽然我不是rbenv用户,但应该可以工作):

  1. Use macports to install port install ruby. This is Ruby 1.8.7. This compilation worked for me on my Mavericks machine (although you will need to install Macports from source at this writing and install the command line developer tools, even if you have XCode 5 installed. Yes, really).
  2. 使用macports安装port install ruby​​。这是Ruby 1.8.7。这个编译在我的Mavericks机器上适用于我(虽然你需要在编写时从源代码安装Macports并安装命令行开发人员工具,即使你安装了XCode 5。是的,真的)。

  3. Now, install rbenv.
  4. 现在,安装rbenv。

  5. Symlink /opt/local/bin/ruby1.8 in the ~/.rbenv/versions/ folder. Specifically ~/.rbenv/versions/ruby-1.8.7-p374
  6. 〜/ .rbenv / versions /文件夹中的符号链接/opt/local/bin/ruby1.8。特别是〜/ .rbenv / versions / ruby​​-1.8.7-p374

  7. Read the rbenv documentation, but it should work now! (At least from the documentation. Again, not an rbenv user, but do play one on TV)
  8. 阅读rbenv文档,但它现在应该工作! (至少从文档中。再次,不是rbenv用户,但在电视上播放一个)

I'm sure you can do this with homebrew too, but I know Ruby 1.8.7 installs correctly with the latest Macports, because that's what I use (and it just installed cleanly for me).

我相信你也可以用自制软件做到这一点,但我知道Ruby 1.8.7可以正确安装最新的Macports,因为这就是我使用的(它只是为我安装干净)。

#2


10  

When you see this error message:

当您看到此错误消息时:

configure: error: C compiler cannot create executables:

configure:错误:C编译器无法创建可执行文件:

First of all, make sure you have upgraded your commandline tools:

首先,确保已升级命令行工具:

$ xcode-select --install

Now Apple wants you to agree to their license before you can use these tools:

现在Apple希望您在使用这些工具之前同意他们的许可证:

$ gcc
Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.

$ sudo gcc
You have not agreed to the Xcode license agreements. You must agree to both license agreements below in order to use Xcode.
[...]

After you have accepted it, the commandline tools will work as expected.

接受它后,命令行工具将按预期工作。

#3


8  

If you've installed developer tools on OS X Mavericks Ruby 1.8 is already installed along with 2.0. So all you need to do is switch the 'Current' symbolic link to point to the 1.8 directory.

如果您已在OS X Mavericks上安装了开发人员工具,则已经安装了Ruby 1.8和2.0。所以你需要做的就是切换'Current'符号链接指向1.8目录。

#Install Xcode Developer tools
xcode-select --install

#Delete Current symbolic link to Ruby 2.0
sudo rm /System/Library/Frameworks/Ruby.framework/Versions/Current

#Create new Current symbolic link to Ruby 1.8
sudo ln -s /System/Library/Frameworks/Ruby.framework/Versions/1.8 /System/Library/Frameworks/Ruby.framework/Versions/Current

#Check Ruby version is 1.8.7
ruby -v

#4


3  

Try this (ensure the dev toolchain is reachable):

试试这个(确保dev工具链可以访问):

$ sudo xcode-select -s /Applications/Xcode5-DP.app/Contents/Developer

Then retry.

#5


0  

Try switching your compiler

尝试切换编译器

rvm install 1.8.7 --with-gcc=clang

#1


13  

10.9 is an early beta build of the OS. [Edit: please note the July 2013 date of this answer] If I were running 10.9 I would assume I'll have to reinstall the operating system from scratch at least 2 more times. (At least once during the beta cycle because, well, it's beta, and once when 10.9 comes out in general release, because, well, beta).

10.9是OS的早期beta版本。 [编辑:请注意2013年7月的答案日期]如果我运行10.9我会假设我必须从头开始重新安装操作系统至少2次。 (在测试周期中至少有一次,因为,它是测试版,一旦10.9在一般版本中出现,因为,好吧,测试版)。

Given this I suggest four courses of action (pick 1 or many):

鉴于此,我建议采取四种行动方案(选择1个或多个):

  • Work with the RVM guys and dig into 10.9's probably-changed compiler environment and get Ruby 1.8.7 compiling. This is trickier because technically this stuff is under NDA.
  • 与RVM人员合作,深入研究10.9可能改变的编译器环境并获得Ruby 1.8.7编译。这比较棘手,因为从技术上讲,这些东西都在NDA之下。

  • Instead, set up a VM and run Ruby 1.8.7 on the VM. Bonus points for using Vagrant and Chef/Puppet, because you may even need to rebuild the VM. (Just keep the Vagrantfile and Puppet or Chef config files on Github/Dropbox/whatever so you can clone them and regenerate your VM from scratch.)
  • 相反,设置VM并在VM上运行Ruby 1.8.7。使用Vagrant和Chef / Puppet的加分点,因为您甚至可能需要重建VM。 (只需将Vagrantfile和Puppet或Chef配置文件保存在Github / Dropbox /中,这样就可以克隆它们并从头开始重新生成VM。)

  • OR simply reboot to 10.8 to get production work done. 10.8 is a production level OS, 10.9 should be treated with caution - it could eat your work. It really shouldn't be used for production purposes (aka: day to day writing Ruby code). If you're writing a 10.9 only app in Cocoa/Objective-C (or updating RubyMotion or something) that might be another thing (but I'd still keep good backups and treat it gently).
  • 或者只需重新启动到10.8即可完成生产工作。 10.8是生产级操作系统,10.9应该谨慎对待 - 它可能会吃掉你的工作。它实际上不应该用于生产目的(又名:日常编写Ruby代码)。如果你在Cocoa / Objective-C中编写一个仅有10.9的应用程序(或更新RubyMotion或其他东西)可能是另一回事(但我仍然保持良好的备份并轻轻地对待它)。

  • Work towards updating your code base for Ruby 2.0, as Ruby 1.8.7 is no longer officially supported anyway.
  • 努力更新Ruby 2.0的代码库,因为无论如何不再正式支持Ruby 1.8.7。

Edit (Oct 24, 2013): If you're here because you just installed Mavericks (released Oct 22, 2013), want to get Ruby 1.8.7 working a few days after this release, and RVM isn't working for you (because you're impatient and can't wait), here's what you can do (which should work, although I'm not an rbenv user):

编辑(2013年10月24日):如果您因为刚刚安装了Mavericks(2013年10月22日发布)而来到这里,那么希望在此版本发布后的几天内让Ruby 1.8.7正常运行,并且RVM不适合您(因为你不耐烦而且等不及了),这就是你可以做的事情(虽然我不是rbenv用户,但应该可以工作):

  1. Use macports to install port install ruby. This is Ruby 1.8.7. This compilation worked for me on my Mavericks machine (although you will need to install Macports from source at this writing and install the command line developer tools, even if you have XCode 5 installed. Yes, really).
  2. 使用macports安装port install ruby​​。这是Ruby 1.8.7。这个编译在我的Mavericks机器上适用于我(虽然你需要在编写时从源代码安装Macports并安装命令行开发人员工具,即使你安装了XCode 5。是的,真的)。

  3. Now, install rbenv.
  4. 现在,安装rbenv。

  5. Symlink /opt/local/bin/ruby1.8 in the ~/.rbenv/versions/ folder. Specifically ~/.rbenv/versions/ruby-1.8.7-p374
  6. 〜/ .rbenv / versions /文件夹中的符号链接/opt/local/bin/ruby1.8。特别是〜/ .rbenv / versions / ruby​​-1.8.7-p374

  7. Read the rbenv documentation, but it should work now! (At least from the documentation. Again, not an rbenv user, but do play one on TV)
  8. 阅读rbenv文档,但它现在应该工作! (至少从文档中。再次,不是rbenv用户,但在电视上播放一个)

I'm sure you can do this with homebrew too, but I know Ruby 1.8.7 installs correctly with the latest Macports, because that's what I use (and it just installed cleanly for me).

我相信你也可以用自制软件做到这一点,但我知道Ruby 1.8.7可以正确安装最新的Macports,因为这就是我使用的(它只是为我安装干净)。

#2


10  

When you see this error message:

当您看到此错误消息时:

configure: error: C compiler cannot create executables:

configure:错误:C编译器无法创建可执行文件:

First of all, make sure you have upgraded your commandline tools:

首先,确保已升级命令行工具:

$ xcode-select --install

Now Apple wants you to agree to their license before you can use these tools:

现在Apple希望您在使用这些工具之前同意他们的许可证:

$ gcc
Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.

$ sudo gcc
You have not agreed to the Xcode license agreements. You must agree to both license agreements below in order to use Xcode.
[...]

After you have accepted it, the commandline tools will work as expected.

接受它后,命令行工具将按预期工作。

#3


8  

If you've installed developer tools on OS X Mavericks Ruby 1.8 is already installed along with 2.0. So all you need to do is switch the 'Current' symbolic link to point to the 1.8 directory.

如果您已在OS X Mavericks上安装了开发人员工具,则已经安装了Ruby 1.8和2.0。所以你需要做的就是切换'Current'符号链接指向1.8目录。

#Install Xcode Developer tools
xcode-select --install

#Delete Current symbolic link to Ruby 2.0
sudo rm /System/Library/Frameworks/Ruby.framework/Versions/Current

#Create new Current symbolic link to Ruby 1.8
sudo ln -s /System/Library/Frameworks/Ruby.framework/Versions/1.8 /System/Library/Frameworks/Ruby.framework/Versions/Current

#Check Ruby version is 1.8.7
ruby -v

#4


3  

Try this (ensure the dev toolchain is reachable):

试试这个(确保dev工具链可以访问):

$ sudo xcode-select -s /Applications/Xcode5-DP.app/Contents/Developer

Then retry.

#5


0  

Try switching your compiler

尝试切换编译器

rvm install 1.8.7 --with-gcc=clang