【问题标题】:Rails cannot load such file -- stringio (LoadError)Rails 无法加载此类文件 -- stringio (LoadError)
【发布时间】:2016-04-10 20:41:25
【问题描述】:

我的 Rails 应用程序运行良好,然后我决定尝试将其从 4.0 更新到 4.2,以便可以将其放在 Heroku 上。我遵循的指南说要更新 RubyGems,所以我运行了这个命令:

$ gem update --system

收到此警告:

Warning! `PATH` is not properly set up, '/Users/devon/.rvm/gems/ruby-2.0.0-p353/bin'
is not at first place, usually this is caused by shell initialization
files - check them for 'PATH=...' entries, it might also help to re-add
RVM to your dotfiles: 'rvm get stable --auto-dotfiles', to fix temporarily
in this shell session run: 'rvm use ruby-2.0.0-p353'

我忽略了警告并转到指南中的下一步。 我尝试创建一个 gemset:

$ rvm use 2.0.0p353@rails4.0.2_myapp --create

然后我决定不更新,因为我害怕破坏我的应用程序。所以我只是尝试将应用推送到 Heroku 而不更新。

我跑了

$ heroku login
$ heroku create
$ git push heroku master

它无法推送到 Heroku,因为 slug 太大了。我去修复它,然后我开始收到这个错误:

/Users/devon/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/rubygems/specification.rb:16:in `require': cannot load such file -- stringio (LoadError)
    from /Users/devon/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/rubygems/specification.rb:16:in `<top (required)>'
    from /Users/devon/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/rubygems.rb:1228:in `require'
    from /Users/devon/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/rubygems.rb:1228:in `<module:Gem>'
    from /Users/devon/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/rubygems.rb:115:in `<top (required)>'
    from <internal:gem_prelude>:1:in `require'
    from <internal:gem_prelude>:1:in `<compiled>'

TLDR:应用程序正在运行。然后我运行了这些命令:

$ gem update --system
$ rvm use 2.0.0p353@rails4.0.2_myapp --create
$ heroku login
$ heroku create
$ git push heroku master

现在我收到 LoadError 错误并且无法运行我的应用程序。我怎样才能解决这个问题?我假设我跑的时候有什么东西坏了

$ gem update --system

我读到了这个问题:no such file to load -- rubygems (LoadError),有人说要检查你是否安装了两个 ruby​​ 版本,所以我跑了:

$ which -a ruby
/Users/devon/.rvm/rubies/ruby-2.0.0-p353/bin/ruby
/usr/bin/ruby

但我不知道之后该做什么,甚至不知道这是否重要,因为我只是在我的应用正常运行后才运行上述命令。

如果重要的话,这里是我的版本:

$ ruby -v
ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-darwin12.5.0]

我无法运行 rails -v,因为我收到了 LoadError。但在错误之前我得到了这个:

$ rails -v
Rails 4.0.2

错误之前(我认为在我运行更新命令后更新到了较新的版本):

$ gem -v
2.4.8

编辑

尝试切换到旧版本的 ruby​​gems 后:

$ rvm rubygems 2.4.8

我明白了:

Warning! PATH is not properly set up, '/Users/devon/.rvm/gems/ruby-2.0.0-p353/bin'
is not at first place, usually this is caused by shell initialization
files - check them for 'PATH=...' entries, it might also help to
re-add RVM to your dotfiles: 'rvm get stable --auto-dotfiles', to fix
temporarily in this shell session run: 'rvm use ruby-2.0.0-p353'.
ruby-2.0.0-p353 - #downloading rubygems-2.4.8
ruby-2.0.0-p353 - #extracting rubygems-2.4.8.....
ruby-2.0.0-p353 - #removing old rubygems..........
ruby-2.0.0-p353 - #installing rubygems-2.4.8.
Error running 'env GEM_HOME=/Users/devon/.rvm/gems/ruby-2.0.0-p353@global GEM_PATH= /Users/devon/.rvm/rubies/ruby-2.0.0-p353/bin/ruby -d /Users/devon/.rvm/src/rubygems-2.4.8/setup.rb --no-document',
showing last 15 lines of /Users/devon/.rvm/log/1452506634_ruby-2.0.0-p353/rubygems.install.log
[2016-01-11 05:03:54] /Users/devon/.rvm/rubies/ruby-2.0.0-p353/bin/ruby
current path: /Users/devon/.rvm/src/rubygems-2.4.8
GEM_HOME=/Users/devon/.rvm/gems/ruby-2.0.0-p353
PATH=/Users/devon/.rvm/gems/ruby-2.0.0-p353/bin:/Users/devon/.rvm/gems/ruby-2.0.0-p353@global/bin:/Users/devon/.rvm/rubies/ruby-2.0.0-p353/bin:/Users/devon/.rvm/bin:/usr/local/bin:/Library/Frameworks/Python.framework/Versions/3.4/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Users/devon/my_stuff/android/adt-bundle-mac-x86_64-20130729/sdk/platform-tools:/Users/devon/my_stuff/android/adt-bundle-mac-x86_64-20130729/sdk/tools
GEM_PATH=/Users/devon/.rvm/gems/ruby-2.0.0-p353:/Users/devon/.rvm/gems/ruby-2.0.0-p353@global
command(7): env GEM_HOME=/Users/devon/.rvm/gems/ruby-2.0.0-p353@global GEM_PATH= /Users/devon/.rvm/rubies/ruby-2.0.0-p353/bin/ruby -d /Users/devon/.rvm/src/rubygems-2.4.8/setup.rb --no-document

然后这里最后出现stringio错误

编辑 2:

$ echo $PATH
/usr/local/bin:/Library/Frameworks/Python.framework/Versions/3.4/bin:/Users/devon/.rvm/gems/ruby-2.0.0-p353/bin:/Users/devon/.rvm/gems/ruby-2.0.0-p353@global/bin:/Users/devon/.rvm/rubies/ruby-2.0.0-p353/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Users/devon/.rvm/bin:/Users/devon/my_stuff/android/adt-bundle-mac-x86_64-20130729/sdk/platform-tools:/Users/devon/my_stuff/android/adt-bundle-mac-x86_64-20130729/sdk/tools

【问题讨论】:

  • 天真的问题,但是你在更新 ruby​​gems 后做了bundle 吗?
  • 是的,我做到了。它不会执行该命令,因为我在运行它后得到了同样的错误。 require': cannot load such file -- stringio (LoadError)
  • 确实很奇怪。也许值得尝试完全重新安装 ruby​​:rvm.io/rubies/removing。我从来没有遇到过这样的问题,但如果我站在你的立场上,我会尝试干净安装 ruby​​,如果没有其他帮助,可能会升级 rvm 本身。
  • 可以添加echo $PATH的输出吗?
  • @taglia 好的我添加了echo $PATH的输出

标签: ruby-on-rails heroku


【解决方案1】:

我对正在发生的事情的最佳猜测:

  1. 您收到的 PATH 警告是因为您使用系统 ruby​​(在 /usr/bin 中)更新了本地 rvm 'gem' 命令;
  2. 当您创建 gemset 时,rvm 修复了路径,但在此之后,系统 ruby​​ 中的 RubyGems 正在使用您的 rvm ruby​​ 运行,我猜这两个版本不匹配。

最简单的解决方案是完全删除并重新安装 rvm:

  1. $ rm -rf ~/.rvm
  2. Reinstall rvm
  3. 重新运行bundle install

要在删除 rvm 之前确认这确实是问题所在,您可以在 PATH 中临时切换 /usr/bin(先放这个)和 /Users/devon/.rvm/gems/ruby-2.0.0-p353/bin(然后放这个)。此时,gem -v 应该仍然为您提供 2.4.8,/Users/devon/.rvm/gems/ruby-2.0.0-p353/bin/gem -v 应该可以正常工作并为您提供更新版本的 RubyGems。

替代解决方案

您可以尝试的其他方法(更简单)是强制 rvm 重新安装旧版本的 RubyGems,然后再次更新(如果需要):

rvm rubygems 2.4.8

查看here 了解有关使用 rvm 管理 RubyGems 的更多详细信息。

【讨论】:

  • 好的。我像你说的那样切换了 PATH 位置并运行了gem -v。该命令实际上有效,但我得到了1.3.6。这会改变什么吗?还是我应该像你建议的那样尝试重新安装 rvm?
  • 这几乎证实了这一点,因为 2.4.8 必须在 rvm 路径中。切换回 PATH 变量中的两个路径后,您是否尝试过运行rvm rubygems 命令?
  • 我在我的问题中进行了编辑,运行rvm rubygems 2.4.8 的错误结果。在将 PATH 位置切换回您执行答案中的操作之前的方式后,我运行了它。
猜你喜欢
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多