【问题标题】:Installing Ruby on Rails on Mac在 Mac 上安装 Ruby on Rails
【发布时间】:2014-06-06 01:11:39
【问题描述】:

要在我的 Mac (v10.9.2) 上安装 RoR,我决定按照此处的 Ruby 1.9.2 说明进行操作:https://*.com/a/8464619/2278546

“rvm install 1.9.2”耗时太长,因此根据 SO 的建议,我使用“rvm requirements”通过 macports 单独安装每个需求。然后我执行“rvm install 1.9.2”,它运行得更快了。

当我尝试执行“gem install rail”时,我收到一条错误消息说

activesupport 需要 Ruby 版本 >= 1.9.3

结果我回去用1.9.3再试了一次:

rvm install 1.9.3
rvm --default 1.9.3
gem update
gem install rails

这一次,在 rails install 命令期间,安装 rails 文档的过程卡住了。我决定中断并运行它:

gem install --no-ri --no-rdoc rails

这行得通!我运行了以下内容:

rails new pong; cd pong; rails generate controller welcome index

该字符串中的最后一个命令给了我以下错误:

/Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/lib/spring/sid.rb:17:in fiddle_func': uninitialized constant Spring::SID::DL (NameError) from /Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/lib/spring/sid.rb:30:in sid' 来自 /Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/lib/spring/sid.rb:39:in pgid' from /Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/lib/spring/server.rb:78:in set_pgid' 来自 /Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/lib/spring/server.rb:34:in boot' from /Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/lib/spring/server.rb:14:in boot' 来自 /Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/lib/spring/client/run.rb:36:in block in boot_server' from /Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/lib/spring/client/run.rb:34:in fork' 来自 /Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/lib/spring/client/run.rb:34:in boot_server' from /Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/lib/spring/client/run.rb:18:in call' 来自 /Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/lib/spring/client/command.rb:7:in call' from /Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/lib/spring/client/rails.rb:23:in call' 来自 /Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/lib/spring/client/command.rb:7:in call' from /Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/lib/spring/client.rb:26:in run' 来自 /Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/bin/spring:48:in <top (required)>' from /Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/lib/spring/binstub.rb:11:in load' 来自 /Users/me/.rvm/gems/ruby-1.9.3-p545/gems/spring-1.1.2/lib/spring/binstub.rb:11:in <top (required)>' from /Users/me/Coding/pong/bin/spring:16:in require' 来自 /Users/me/Coding/pong/bin/spring:16:in <top (required)>' from bin/rails:3:inload' 来自 bin/rails:3:in `'

根据阅读 herehere 和其他地方的建议,我决定尝试使用不同的编译器:

port install gcc46
CC=`which gcc-mp-4.6`
rvm reinstall 1.9.3
gem install
rvm reinstall 1.9.3

这个安装也有同样的问题。

【问题讨论】:

    标签: ruby-on-rails ruby macos rails-spring


    【解决方案1】:

    我怀疑中断这些构建可能会使事情处于糟糕的状态。首先,卸载 1.9.2。至少到目前为止,1.9.3-p545 是最旧的受支持版本。

    接下来,卸载 gem 'spring-commands-rspec' 并运行 gem pristine -all。然后进行另一个捆绑安装。 FWIW,我可以在我的 10.9.2 macbook 上运行 spring。如果您的 gcc 出现问题,您可能需要重新安装 xcode 命令行工具。

    除此之外,您不需要 spring 来运行 rails 应用程序。它主要是开发和测试期间的助手。一旦你把东西清理干净,我会从你的 Gemfile 中删除它,直到你真正需要它为止。

    【讨论】:

      【解决方案2】:

      通过将@Andrew 的建议与一些常识相结合,我能够让事情顺利进行......

      我先把我弄的烂摊子收拾干净:

      sudo rvm remove 1.9.2
      sudo rvm remove 1.9.3
      sudo rvm remove 1.9.3-p545
      sudo gem uninstall spring-commands-rspec
      sudo gem pristine -a
      sudo port uninstall rvm
      

      然后我重新安装了 rvm

      sudo port install rvm
      

      并使用 rails 重新安装 Ruby 1.9.3:

      sudo rvm install 1.9.3
      sudo gem update
      sudo gem install --no-ri --no-rdoc rails
      

      上述问题仍然存在。

      然后我记得我在安装 Ruby 时收到了以下消息(确认 Andrew 的评论):

      警告:请注意,您刚刚安装的 ruby​​ 不是 维护时间更长 (2014-02-23),有关维护的红宝石列表,请访问:

      http://bugs.ruby-lang.org/projects/ruby/wiki/ReleaseEngineering
      

      请考虑升级到 ruby​​-2.1.1,它将包含所有 最新的安全补丁。

      所以,我又清理了一遍:

      sudo rvm remove 1.9.3
      sudo rvm remove 1.9.3-p545
      sudo gem uninstall spring-commands-rspec
      sudo gem pristine -a
      

      然后,我尝试安装 Ruby 2.1.1 和 Rails:

      sudo rvm install 2.1.1
      sudo gem update
      sudo gem install --no-ri --no-rdoc rails
      

      这一次,我尝试运行时没有出错

      rails new pong; cd pong; rails generate controller welcome index
      

      这不是一个理想的答案,因为我仍然无法让 1.9.3 工作,但它符合我的目的(我认为)。任何人有任何理论解释为什么 1.9.3 不起作用?

      谢谢,

      草场

      【讨论】: