【问题标题】:Load error when running rails console运行rails控制台时加载错误
【发布时间】:2014-04-22 09:22:12
【问题描述】:

我正在使用 rails 4.1 和 ruby​​ 2.1.1

一切正常,但是当我运行 rails 控制台时出现此错误

> rails console
Loading development environment (Rails 4.1.0)
load error: /home/andreas/.rvm/rubies/ruby-2.1.1/.irbrc
NoMethodError: undefined method `split' for nil:NilClass
    /home/andreas/.rvm/scripts/irbrc.rb:41:in `<top (required)>'

错误后控制台打开,可以使用了。

这是 .irbrc 文件中的第 41 行及其周围的内容。

39 # Calculate the ruby string.
40 rvm_ruby_string = ENV["rvm_ruby_string"] ||
41 (ENV['GEM_HOME'] && ENV['GEM_HOME'].split(/\//).last.split(/@/).first) ||
42 ("#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" rescue nil) ||
43 (RUBY_DESCRIPTION.split(" ")[1].sub('p', '-p') rescue nil ) ||
44 (`ruby -v` || '').split(" ")[1].sub('p', '-p')

我在控制台中测试时得到这些结果

irb(main):008:0> ENV['GEM_HOME']
=> ""
irb(main):009:0> ENV['GEM_HOME'].split(/\//).last
=> nil

如果我在 rails 应用程序之外运行 irb,我会得到

2.1.1 :001 > ENV['GEM_HOME']
 => "/home/andreas/.rvm/gems/ruby-2.1.1" 
2.1.1 :002 > ENV['GEM_HOME'].split(/\//).last
 => "ruby-2.1.1" 

你知道为什么rails应用程序中的环境变量是空白的吗?

【问题讨论】:

  • 您能否向我们提供有关您的堆栈的更多详细信息?我认为您在 Linux 上运行——它是如何设置的?
  • 我也见过这种情况——运行 bundle exec rails c 会产生错误,但 bin/rails c 不会。我没有机会进一步挖掘。也许捆绑器以一种混淆 rvm 的方式弄乱了 gem 环境?
  • @RichPeck 这是最新更新的 ubuntu 14.04、rails 4.1 和 ruby​​ 2.1.1。都是从以前的版本更新的。
  • @FrederickCheung 我收到所有可能命令的错误(bin/rails,bundle exec rails c 和 rails c)。我猜 rails GEM_HOME 可能与全局 GEM_HOME 不同,并且当 rails c 运行时 rails GEM_HOME 正在使用中。
  • 这可能是因为您的 rvm 环境发生了一些问题。我刚刚发生了一些事情,所以我正在重新安装 rvm,因为无论如何我那里有 10GB 过时的 ruby​​ 版本。

标签: ruby-on-rails


【解决方案1】:

如果您遇到此问题您应该重新启动计算机。如果这不能解决它,请继续阅读。

bin/spring 文件将 ENV["GEM_HOME"] 设置为空字符串

bin/弹簧

11 ENV["GEM_PATH"] = ([Bundler.bundle_path.to_s] + Gem.path).join(File::PATH_SEPARATOR)
12 ENV["GEM_HOME"] = ""
13 Gem.paths = ENV

这在运行 rails 控制台时会崩溃,因为在第 41 行

ENV['GEM_HOME'].split(/\//).last

如果ENV['GEM_HOME'] 为空,则返回 nil

~/.rvm/rubies/ruby-2.1.1/.irbrc

39 # Calculate the ruby string.
40 rvm_ruby_string = ENV["rvm_ruby_string"] ||
41 (ENV['GEM_HOME'] && ENV['GEM_HOME'].split(/\//).last.split(/@/).first) ||
42 ("#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" rescue nil) ||
43 (RUBY_DESCRIPTION.split(" ")[1].sub('p', '-p') rescue nil ) ||
44 (`ruby -v` || '').split(" ")[1].sub('p', '-p')

rvm 使用字符串在控制台中设置提示信息。 如果将 bin/spring 中的第 12 行更改为

ENV["GEM_HOME"] = "Spring is great!"

你会得到这个很好的提示

bin/rails c
Loading development environment (Rails 4.1.0)
Spring is great! :001 > 

我真的不明白为什么ENV["GEM_HOME"] 被设置为一个空白字符串。所以,我只是改变它来摆脱错误。我在spring github页面上发布了一个问题。

小心!

当您运行spring binstub 命令时,对 bin/spring 文件的任何更改都会被覆盖

【讨论】:

    【解决方案2】:

    我刚遇到同样的问题,我通过spring stop解决了。我认为没有必要重新启动计算机。你应该做的是重启spring。

    【讨论】:

    • 在我的情况下,我必须重新启动我尝试过spring stop 的计算机,但我仍然有错误
    【解决方案3】:

    这些步骤解决了我的问题:

    • 查找当前的 ruby​​ 版本

    红宝石-v

    示例:

    ruby 2.1.2p95(2014-05-08 修订版 45877)[x86_64-darwin13.0]

    • 删除此版本

    rvm 删除 2.1.2

    • 重新安装

    rvm 安装 2.1.2

    【讨论】:

      【解决方案4】:

      您可能只需要使用

      指定一个 gemset
      rvm gemset use YourGemset
      

      我发现为每个项目使用单独的 gemset 是个好主意。然后将该项目的 gemset 的名称放在项目根目录中名为 .ruby-gemset 的文件中。请参阅https://rvm.io/workflow/projects 了解更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多