Rails 4每个命令出错“`load’:没有将nil隐式转换为String”(Mac OS X 10.9)

我刚刚在我的新Macbook上安装了一个新的Ruby on Rails dev堆栈,它运行Mac OS X 10.9 Mavericks。

这是我的堆栈:

  • Xcode命令行工具
  • 家酿
  • Rbenv
  • 捆绑
  • Ruby 2.1.0
  • Rails 4.1.1

我运行了rails new test_app来生成第一个测试应用程序。 此命令已成功完成,但由于它,我在CLI中尝试的每个Rails命令都会返回以下错误消息:

 $ test_app > bin/rails server /Users/me/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/client/rails.rb:27:in `load': no implicit conversion of nil into String (TypeError) from /Users/me/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/client/rails.rb:27:in `call' from /Users/me/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/client/command.rb:7:in `call' from /Users/me/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/client.rb:26:in `run' from /Users/me/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/spring-1.1.3/bin/spring:48:in `' from /Users/me/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/binstub.rb:11:in `load' from /Users/me/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/binstub.rb:11:in `' from /Users/me/.rbenv/versions/2.1.0/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /Users/me/.rbenv/versions/2.1.0/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /Users/me/Documents/[PERSONNEL]/dev/test_app/bin/spring:16:in `' from bin/rails:3:in `load' from bin/rails:3:in `' 

尝试启动控制台时出现相同的错误:

 $ test_app > bin/rails c /Users/me/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:241:in `load': no implicit conversion of nil into String (TypeError) from /Users/me/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:241:in `block in load' from /Users/me/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:232:in `load_dependency' from /Users/me/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:241:in `load' from /Users/me/.rbenv/versions/2.1.0/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /Users/me/.rbenv/versions/2.1.0/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' from -e:1:in `' 

bin/rake正在部分工作(我可以使用bin/rake routes但迁移不起作用)。

我的最后一次尝试是安装XCode ,但它没有解决它。


更新 :命令bundle exec rake rails:update:bin如下所述解决项目的问题,但需要在每个新问题上执行。 这个问题似乎更深了。

好的我找到了解决方案

我也清理了我的mac。 我得到了同样的错误。

rails_root / bin文件夹不存在?

试试以下

bundle exec rake rails:update:bin

我也有同样的问题。 简短的探索如下。

首先,我在应用程序的根路径中有[]rails s命令期间的错误

 psylone@wizard:~/ruby-rails[code]/context$ rails s /home/psylone/.rvm/gems/ruby-2.2.0/gems/spring-1.2.0/lib/spring/client/rails.rb:30:in `load': no implicit conversion of nil into String (TypeError) 

在这里是spring gem : https : //github.com/rails/spring/blob/master/lib/spring/client/rails.rb#L27

那是因为如果Dir.glob在path参数中包含[] ,结果将是一个空数组。 所以有必要在Dir.glob方法的path参数中转义[] 。 我想到这样的事情:

 # Instead of line 27 in spring/client/rails.rb require 'shellwords' path = Shellwords.escape(Spring.application_root_path) << "/{bin,script}/rails" load path 

在此修复之后,我发现rails s命令工作正常。 但rails c命令仍会导致错误。 可能答案具有相同的性质。

因此, 避免此错误的最简单方法是 - 重命名应用程序的根路径(不带[]字符)