【问题标题】:Rails 4 Error with every command "`load': no implicit conversion of nil into String" (Mac OS X 10.9)Rails 4 每个命令都出错“`load':没有将 nil 隐式转换为字符串”(Mac OS X 10.9)
【发布时间】:2014-09-17 14:02:15
【问题描述】:

我刚刚在运行 Mac OS X 10.9 Mavericks 的新 Macbook 上安装了新的 Ruby on Rails 开发堆栈。

这是我的堆栈:

  • 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 `<top (required)>'
    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 `<top (required)>'
    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 `<top (required)>'
    from bin/rails:3:in `load'
    from bin/rails:3:in `<main>'

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

$ 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 `<main>'

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

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


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

【问题讨论】:

    标签: ruby-on-rails ruby xcode macos


    【解决方案1】:

    好的,我找到了解决方案。

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

    rails_root/bin 文件夹不存在?

    试试下面

    bundle exec rake rails:update:bin

    【讨论】:

    • 不知道你是怎么找到它的,但它可以工作,现在我所有的新项目又可以工作了!谢谢!
    • 无论如何,我的迁移仍然存在问题,它一直处于停滞状态。 :(
    【解决方案2】:

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

    首先,我的应用程序的根路径中有[]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 在路径参数中包含[],则结果将是一个空数组。因此有必要在Dir.glob 方法的路径参数中转义[]。我想到了这样的事情:

    # 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 命令仍然会导致错误。可能答案具有相同的性质。

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

    【讨论】:

    • 感谢调查!我没有问题了,所以我无法验证您的解决方案。不过真的很感谢你的分享。 :)
    猜你喜欢
    • 2020-03-15
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多