psych icon indicating copy to clipboard operation
psych copied to clipboard

Heisen-loading of 2.0.12

Open cdlm opened this issue 10 years ago • 29 comments

If I install 2.0.12, it breaks https://github.com/flavio/jump; 2.0.8 works fine, though. Here's an illustration of the problem (note that it's undefined method, not wrong number of arguments:

$ gem list psych

*** LOCAL GEMS ***

psych (2.0.12, 2.0.8)

$ ruby -r yaml -e 'puts Psych.methods.include?(:load_file)'
true

$ pry -r yaml
[1] pry(main)> Psych.load_file
NoMethodError: undefined method `load_file' for Psych:Module
from (pry):1:in `__pry__'
[2] pry(main)> Psych::load_file
NoMethodError: undefined method `load_file' for Psych:Module
from (pry):2:in `__pry__'
[3] pry(main)>

See https://gist.github.com/cdlm/4f90f67ce0fadd40f946

cdlm avatar Feb 04 '15 13:02 cdlm

I don't see this anymore with ruby 2.1.2 and psych 2.0.13.

cdlm avatar Mar 04 '15 20:03 cdlm

Wait… yes I do… :confused:

cdlm avatar Mar 06 '15 11:03 cdlm

What version of pry are you using?

tenderlove avatar Mar 06 '15 21:03 tenderlove

*** LOCAL GEMS ***
pry (0.10.1)

But the main way I see the problem is when http://github.com/flavio/jump tries to load its config file… I just used pry to investigate the problem.

cdlm avatar Mar 06 '15 21:03 cdlm

The repro you're showing above doesn't have jump involved though, right?

tenderlove avatar Mar 06 '15 22:03 tenderlove

[aaron@TC ~]$ gem list jump pry psych

*** LOCAL GEMS ***

jump (0.4.0)

*** LOCAL GEMS ***

pry (0.10.1)

*** LOCAL GEMS ***

psych (2.0.13, 2.0.12, 2.0.10, 2.0.8)
[aaron@TC ~]$ pry -r yaml
[1] pry(main)> Psych.load_file
ArgumentError: wrong number of arguments (0 for 1)
from /Users/aaron/.rbenv/versions/ruby-trunk/lib/ruby/2.3.0/psych.rb:463:in `load_file'
[2] pry(main)> 

tenderlove avatar Mar 06 '15 22:03 tenderlove

Indeed. But if you have a look at the incriminated line in jump, you'll see it does a nice sweep-that-exception-under-the-rug move…

/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/jump-0.4.0/lib/bookmarks.rb:35:in `rescue in initialize': Can't load configuration file (RuntimeError)
    from /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/jump-0.4.0/lib/bookmarks.rb:30:in `initialize'
    from /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/jump-0.4.0/bin/jump-bin:78:in `new'
    from /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/jump-0.4.0/bin/jump-bin:78:in `<top (required)>'
    from /Users/damien/.rbenv/versions/2.2.1/bin/jump-bin:23:in `load'
    from /Users/damien/.rbenv/versions/2.2.1/bin/jump-bin:23:in `<main>'

I suspect a possibility is that one of rbenv's plugin is to blame, but how to know?

cdlm avatar Mar 06 '15 22:03 cdlm

Can you try RUBYOPT=-d pry -rpsych? It will probably spew a bunch of output, but you'll be able to see any exceptions that were caught. Maybe that will give us a clue?

tenderlove avatar Mar 06 '15 22:03 tenderlove

So I killed and reinstalled rbenv…

$ rbenv versions
  system
* 2.2.1 (set by /Users/damien/.rbenv/version)
$ gem list jump pry psych

*** LOCAL GEMS ***

jump (0.4.0)

*** LOCAL GEMS ***

pry (0.10.1)

*** LOCAL GEMS ***

psych (2.0.13, 2.0.8)
$ ruby -ryaml -de 'Psych.load_file'
Exception `LoadError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems.rb:1222 - cannot load such file -- rubygems/defaults/operating_system
Exception `LoadError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems.rb:1231 - cannot load such file -- rubygems/defaults/ruby
Exception `NameError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/psych-2.0.13/lib/psych/class_loader.rb:67 - uninitialized constant BigDecimal
Exception `NameError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/psych-2.0.13/lib/psych/class_loader.rb:67 - uninitialized constant Date
Exception `NameError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/psych-2.0.13/lib/psych/class_loader.rb:67 - uninitialized constant DateTime
Exception `NameError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/psych-2.0.13/lib/psych/core_ext.rb:16 - method `to_yaml' not defined in Object
Exception `NameError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/psych-2.0.13/lib/psych/core_ext.rb:29 - method `yaml_as' not defined in Module
Exception `NameError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/psych-2.0.13/lib/psych/deprecated.rb:81 - undefined method `to_yaml_properties' for class `Object'
Exception `ArgumentError' at -e:1 - wrong number of arguments (0 for 1)
/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/psych-2.0.13/lib/psych.rb:463:in `load_file': wrong number of arguments (0 for 1) (ArgumentError)
    from -e:1:in `<main>'
$ RUBYOPT=-d pry -rpsych
Exception `LoadError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems.rb:1222 - cannot load such file -- rubygems/defaults/operating_system
Exception `LoadError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems.rb:1231 - cannot load such file -- rubygems/defaults/ruby
Exception `LoadError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54 - cannot load such file -- active_support/inflector
Exception `NoMethodError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/specification.rb:1984 - undefined method `to_ary' for #<Gem::Specification:0x007fd3c1899c88>
Exception `NoMethodError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/specification.rb:1984 - undefined method `to_ary' for #<Gem::Specification:0x007fd3c1a43ef8>
Exception `NoMethodError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/specification.rb:1984 - undefined method `to_ary' for #<Gem::Specification:0x007fd3c1a095a0>
Exception `NoMethodError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/specification.rb:1984 - undefined method `to_ary' for #<Gem::Specification:0x007fd3c1a102d8>

[SNIP A BUNCH OF SIMILAR ONES]

Exception `NoMethodError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/specification.rb:1984 - undefined method `to_ary' for #<Gem::Specification:0x007fd3c1a102d8>
/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/history.rb:86: warning: File.exists? is a deprecated name, use File.exist? instead
Exception `NameError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/method.rb:81 - undefined method `__pry__' for class `Object'
Exception `RuntimeError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/method/disowned.rb:48 - Cannot call 'source_location' on an undef'd method.
Exception `RuntimeError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/method/disowned.rb:48 - Cannot call 'source_location' on an undef'd method.
/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/method.rb:383: warning: instance variable @method not initialized
Exception `EOFError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/repl.rb:198 - end of file reached
[1] pry(main)> Psych.load_file
Exception `NoMethodError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/specification.rb:1984 - undefined method `to_ary' for #<Gem::Specification:0x007fd3c1899c88>

[SNIP A BUNCH OF SIMILAR ONES]

Exception `NoMethodError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/specification.rb:1984 - undefined method `to_ary' for #<Gem::Specification:0x007fd3c1a095a0>
Exception `NoMethodError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/specification.rb[1] pry(main)> Psych.load_filery' for #<Gem::Specification:0x007fd3c1a102d8>
Exception `NoMethodError' at (pry):1 - undefined method `load_file' for Psych:Module
Exception `NoMethodError' at /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/pry_instance.rb:355 - undefined method `load_file' for Psych:Module
NoMethodError: undefined method `load_file' for Psych:Module
from (pry):1:in `__pry__'
[2] pry(main)>

The funniest is that jump does work now…

cdlm avatar Mar 06 '15 23:03 cdlm

hmmmmm. OK, can you open pry, and show $LOADED_FEATURES? It seems like the so file is getting loaded, but not the .rb file somehow. Also, are those the only gems you have for that version of Ruby? One more question: if you load pry, then from pry do require 'psych', is the method available?

tenderlove avatar Mar 07 '15 21:03 tenderlove

Hmm. I'm thinking. One thing that is not so standard is that I use the case-sensitive filesystem (on OS X Yosemite). But if loading the native lib depended on case, then why would pry behave differently from ruby?

$ gem list

*** LOCAL GEMS ***

activesupport (4.2.0)
addressable (2.3.7)
adsf (1.2.0)
bigdecimal (1.2.7, 1.2.6)
binding_of_caller (0.7.2)
builder (3.2.2)
bundler (1.8.4)
celluloid (0.16.0)
chronic (0.10.2)
coderay (1.1.0)
colored (1.2)
columnize (0.9.0)
cri (2.6.1)
daemons (1.1.9)
debug_inspector (0.0.2)
debugger-linecache (1.2.0)
descendants_tracker (0.0.4)
eventmachine (1.0.7)
faraday (0.9.1)
ffi (1.9.6)
formatador (0.2.5)
git (1.2.9.1)
github_api (0.12.3)
guard (2.12.4)
guard-nanoc (1.0.3)
haml (4.0.6)
hashie (3.4.0)
highline (1.7.1)
hitimes (1.2.2)
i18n (0.7.0)
io-console (0.4.3)
jeweler (2.0.1)
json (1.8.2, 1.8.1)
jump (0.4.0)
jwt (1.3.0)
kramdown (1.6.0)
listen (2.8.5)
lolcat (42.1.0)
lumberjack (1.0.9)
method_source (0.8.2)
mini_portile (0.6.2)
minitest (5.5.1, 5.4.3)
multi_json (1.11.0)
multi_xml (0.5.5)
multipart-post (2.0.0)
nanoc (3.7.5)
nenv (0.2.0)
nokogiri (1.6.6.2)
notiffany (0.0.6)
oauth2 (1.0.0)
paint (0.9.0, 0.8.7)
power_assert (0.2.3, 0.2.2)
pry (0.10.1)
psych (2.0.13, 2.0.8)
rack (1.6.0)
rake (10.4.2)
rb-fsevent (0.9.4)
rb-inotify (0.9.5)
rdoc (4.2.0)
rubypants (0.2.0)
sass (3.4.13)
shellany (0.0.1)
slop (4.0.0, 3.6.0)
systemu (2.6.4)
terminal-table (1.4.5)
test-unit (3.0.9, 3.0.8)
thin (1.6.3)
thor (0.19.1)
thread_safe (0.3.4)
tilt (2.0.1)
timers (4.0.1)
trollop (2.1.1, 1.16.2)
tzinfo (1.2.2)
w3c_validators (1.2)
$ pry
[1] pry(main)> $LOADED_FEATURES
=> ["enumerator.so",
 "rational.so",
 "complex.so",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/x86_64-darwin14/enc/encdb.bundle",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/x86_64-darwin14/enc/trans/transdb.bundle",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/unicode_normalize.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/x86_64-darwin14/rbconfig.rb",
 "thread.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/x86_64-darwin14/thread.bundle",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/compatibility.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/defaults.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/deprecate.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/errors.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/version.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/requirement.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/platform.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/basic_specification.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/stub_specification.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/util/stringio.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/specification.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/exceptions.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/core_ext/kernel_gem.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/monitor.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/dependency.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/path_support.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/prettyprint.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/pp.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/input_lock.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/exceptions.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/helpers/base_helpers.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/hooks.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/forwardable.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/method_source-0.8.2/lib/method_source/version.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/method_source-0.8.2/lib/method_source/source_location.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/method_source-0.8.2/lib/method_source/code_helpers.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/method_source-0.8.2/lib/method_source.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/shellwords.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/x86_64-darwin14/stringio.bundle",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay/version.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/slop-3.6.0/lib/slop/option.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/slop-3.6.0/lib/slop/commands.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/slop-3.6.0/lib/slop.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/delegate.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/x86_64-darwin14/etc.bundle",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/fileutils.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/tmpdir.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/tempfile.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/x86_64-darwin14/pathname.bundle",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/pathname.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/version.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/repl.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/rbx_path.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/code/loc.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/code/code_range.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/code/code_file.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/code.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/history_array.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/helpers/options_helpers.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/helpers/command_helpers.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/helpers/text.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/helpers/table.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/helpers.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/code_object.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/helpers/documentation_helpers.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/method/weird_method_locator.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/method/disowned.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/method/patcher.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/method.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/module_candidate.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/wrapped_module.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/history.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/command.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/command_set.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/amend_line.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/bang.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/bang_pry.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/cat/abstract_formatter.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/cat/input_expression_formatter.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/cat/exception_formatter.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/cat/file_formatter.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/cat.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/cd.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/change_inspector.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/change_prompt.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/code_collector.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/disable_pry.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/disabled_commands.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/easter_eggs.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/edit/exception_patcher.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/edit/file_and_line_locator.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/edit.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/exit.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/exit_all.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/exit_program.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/find_method.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/fix_indent.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/gem_cd.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/gem_install.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/gem_list.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/gem_open.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/gist.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/help.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/hist.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/import_set.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/install_command.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/jump_to.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/list_inspectors.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/list_prompts.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/ls/grep.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/ls/formatter.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/ls/globals.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/ls/interrogatable.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/ls/constants.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/ls/jruby_hacks.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/ls/methods_helper.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/ls/methods.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/ls/self_methods.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/ls/instance_vars.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/ls/local_names.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/ls/local_vars.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/ls/ls_entity.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/ls.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/nesting.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/play.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/pry_backtrace.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/pry_version.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/raise_up.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/reload_code.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/reset.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/ri.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/save_file.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/shell_command.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/shell_mode.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/show_info.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/show_doc.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/show_input.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/show_source.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/simple_prompt.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/stat.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/switch_to.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/toggle_color.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/watch_expression/expression.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/watch_expression.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/whereami.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands/wtf.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/commands.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/plugins.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/core_extensions.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/config/behavior.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/config/default.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/config/convenience.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/config.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/pry_class.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/pry_instance.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/cli.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay/helpers/plugin.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay/encoder.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay/encoders/_map.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay/encoders/terminal.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/color_printer.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/terminal.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/pager.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/editor.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/rubygem.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/indent.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/last_exception.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/prompt.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/inspector.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/object_path.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/output.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/thread_safe-0.3.4/lib/thread_safe/version.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/thread_safe-0.3.4/lib/thread_safe/synchronized_delegator.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/thread_safe-0.3.4/lib/thread_safe.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activesupport-4.2.0/lib/active_support/core_ext/array/prepend_and_append.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activesupport-4.2.0/lib/active_support/core_ext/hash/deep_merge.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activesupport-4.2.0/lib/active_support/core_ext/hash/except.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activesupport-4.2.0/lib/active_support/core_ext/hash/slice.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/i18n-0.7.0/lib/i18n/version.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/cgi/core.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/cgi/util.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/cgi/cookie.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/cgi.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/i18n-0.7.0/lib/i18n/exceptions.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/i18n-0.7.0/lib/i18n/interpolate/ruby.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/i18n-0.7.0/lib/i18n.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activesupport-4.2.0/lib/active_support/lazy_load_hooks.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/set.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/i18n-0.7.0/lib/i18n/config.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activesupport-4.2.0/lib/active_support/i18n.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/thread_safe-0.3.4/lib/thread_safe/non_concurrent_cache_backend.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/thread_safe-0.3.4/lib/thread_safe/mri_cache_backend.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/thread_safe-0.3.4/lib/thread_safe/cache.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activesupport-4.2.0/lib/active_support/inflector/inflections.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activesupport-4.2.0/lib/active_support/multibyte.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activesupport-4.2.0/lib/active_support/core_ext/string/multibyte.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activesupport-4.2.0/lib/active_support/inflector/transliterate.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activesupport-4.2.0/lib/active_support/inflections.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activesupport-4.2.0/lib/active_support/inflector/methods.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activesupport-4.2.0/lib/active_support/core_ext/string/inflections.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activesupport-4.2.0/lib/active_support/inflector.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/x86_64-darwin14/readline.bundle",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay/tokens_proxy.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/x86_64-darwin14/strscan.bundle",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay/scanner.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay/scanners/_map.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay/scanners/ruby.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay/tokens.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay/scanners/ruby/string_state.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay/helpers/word_list.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay/scanners/ruby/patterns.rb",
 "/Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/x86_64-darwin14/io/console.bundle"]
[2] pry(main)> require 'psych'
=> true
[3] pry(main)> Psych.load_file
NoMethodError: undefined method `load_file' for Psych:Module
from (pry):3:in `__pry__'

cdlm avatar Mar 07 '15 21:03 cdlm

Impact of loading Psych:

$ diff -uN <(echo 'puts $LOADED_FEATURES' | pry) <(echo 'require "psych"; puts $LOADED_FEATURES' | pry)
--- /dev/fd/11  2015-03-07 22:55:34.000000000 +0100
+++ /dev/fd/12  2015-03-07 22:55:34.000000000 +0100
@@ -1,4 +1,4 @@
-[1] pry(main)> puts $LOADED_FEATURES
+[1] pry(main)> require "psych"; puts $LOADED_FEATURES
enumerator.so
 rational.so
 complex.so
@@ -213,4 +213,7 @@
 /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay/scanners/ruby/string_state.rb
 /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay/helpers/word_list.rb
 /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/coderay-1.1.0/lib/coderay/scanners/ruby/patterns.rb
+/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/psych-2.0.13/lib/psych/exception.rb
+/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/psych-2.0.13/lib/psych/syntax_error.rb
+/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-14/2.2.0-static/psych-2.0.13/psych.bundle
 [2] pry(main)> => nil

Indeed, psych.rb doesn't appear…

cdlm avatar Mar 07 '15 21:03 cdlm

Looks like require 'psych' is ambiguous; psych.rb does require 'psych.so' which I suppose is mapped to psych.bundle on OSX. In pry, if I require 'psych.rb' explicitly, then much more is loaded and the Psych.load_file is there.

cdlm avatar Mar 07 '15 22:03 cdlm

That's really weird. Doing require 'psych' should load the rb file (Ruby's require prioritizes .rb files over .so or .bundle files), then it explicitly loads the extension (that's what the .so load does).

+/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/psych-2.0.13/lib/psych/exception.rb
+/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/psych-2.0.13/lib/psych/syntax_error.rb
+/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-14/2.2.0-static/psych-2.0.13/psych.bundle

These lines are strange. Why do you have the .bundle file in an "extensions" directory? Or, how did it get there?

I wonder if this is a RubyGems bug. What is the output of gem -v?

tenderlove avatar Mar 09 '15 01:03 tenderlove

$ gem -v
2.4.5

No time right now but I should probably try de/reinstalling the gem and checking its file layout.

cdlm avatar Mar 09 '15 08:03 cdlm

Ok, so this works: ruby -ryaml -de 'Psych.load_file', but loading from pry does not.

Can you try this?

  1. Take note of the permissions on /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-14/2.2.0-static/psych-2.0.13/psych.bundle
  2. chmod 000 /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-14/2.2.0-static/psych-2.0.13/psych.bundle
  3. Try to load psych from pry (as usual with require "psych")
  4. Hopefully you'll get an exception. Post the stack trace here.
  5. Change the permissions for '/Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-14/2.2.0-static/psych-2.0.13/psych.bundle' back

tenderlove avatar Mar 09 '15 23:03 tenderlove

$ ll ~/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-14/2.2.0-static/psych-2.0.13/psych.bundle
---------- 1 damien staff 147K Mar  6 23:58 /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-14/2.2.0-static/psych-2.0.13/psych.bundle
$ pry
[1] pry(main)> require 'psych'
LoadError: cannot load such file -- /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-14/2.2.0-static/psych-2.0.13/psych.bundle
from /Users/damien/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:69:in `require'
[2] pry(main)>

cdlm avatar Mar 10 '15 02:03 cdlm

:up: I'm still getting that with 2.0.13 on ruby 2.2.2 (in fact on 2.2.2, neither the default psych or the latest seem to work…)

Did you have an intuition about what the problem could be ?

cdlm avatar Apr 20 '15 13:04 cdlm

Hi, sorry I haven't looked at this in a while. The thing I'm really confused about it where /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-14/2.2.0-static/psych-2.0.13/psych.bundle is coming from. When you install a new Ruby (without installing psych) does that file exist?

Do you happen to have any .gemrc files or something in your home dir that could impact how the gem is getting installed?

After you install the gem, does /Users/damien/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/psych-2.0.13/lib/psych.bundle exist?

tenderlove avatar May 07 '15 20:05 tenderlove

Ok so I removed 2.2.2, then reinstalled it clean:

$ ll .rbenv/versions
total 4.0K
lrwxr-xr-x 1 damien staff  10 Mar 13 00:55 1.9.3 -> 1.9.3-p551/
drwxr-xr-x 6 damien staff 204 Mar 13 00:55 1.9.3-p551/

$ rbenv install 2.2.2
Downloading ruby-2.2.2.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/5ffc0f317e429e6b29d4a98ac521c3ce65481bfd22a8cf845fa02a7b113d9b44
Installing ruby-2.2.2...
Installed ruby-2.2.2 to /Users/damien/.rbenv/versions/2.2.2

$ rbenv global 2.2.2
$ rbenv rehash
$ gem list

*** LOCAL GEMS ***

bigdecimal (1.2.6)
io-console (0.4.3)
json (1.8.1)
minitest (5.4.3)
power_assert (0.2.2)
psych (2.0.8)
rake (10.4.2)
rdoc (4.2.0)
test-unit (3.0.8)

$ ls .rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/extensions

So psych 2.0.8 comes with the ruby install, but does not have a .bundle. Installing the gem now gives:

$ gem install psych
Fetching: psych-2.0.13.gem (100%)
Building native extensions.  This could take a while...
Successfully installed psych-2.0.13
1 gem installed

$ ls .rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-14/2.2.0-static/psych-2.0.13/
gem.build_complete  gem_make.out  mkmf.log  psych.bundle*

I have a .gemrc file with not much relevant in it. I have removed all rbenv extensions except for rbenv-aliases.

cdlm avatar May 08 '15 13:05 cdlm

…and now jump works and the pry example from my initial report says ArgumentError: wrong number of arguments (0 for 1) (instead of NoMethodError) in both cases… :monkey_face:

cdlm avatar May 08 '15 13:05 cdlm

OK, I think I finally managed to get something that looks like a clue.

Fresh install works, the problem appears after I gem update or I bundle install in some project. So I went through that project dependencies, and narrowed it to having two versions of rack available at the same time (1.6.0 and 1.6.1 precisely, but I'd bet it does not matter that much). With only one rack version (either one) installed, jump works; as soon as I install both, the bug appears (jump is the tool that exhibits the problem in my day-to-day use). I can't remove rack completely because jump depends on in through jump→jeweler→github_api→oauth2→rack.

cdlm avatar May 08 '15 21:05 cdlm

Interesting. If you're able to reproduce this all the way from a fresh install, can you give me the full set of steps (including the test repo that you're bundle installing against)?

tenderlove avatar May 11 '15 17:05 tenderlove

I seem to have bumped into this issue as well (https://github.com/troessner/reek/issues/653). Some details:

  • I'm running Linux with CRuby 2.2.2p95 under rbenv.
  • This happens when the psych gem is installed in addition to the one that comes with Ruby; Removing the gem fixes the problem.
  • I'm unable to reproduce this when running under Bundler, even when I include psych in the Gemfile.
  • It only happens if yaml (or psych) is required from inside a file that is itself part of a gem.

mvz avatar Aug 21 '15 06:08 mvz

This should be reproducible with just the following steps:

rbenv install 2.2.3  # Or some other version that wasn't installed before
rbenv shell 2.2.3
gem update psych
gem install reek
gem install unparser --version "0.2.3"
ruby -e 'require "reek"; puts YAML.methods(false).count'

The last line will output 1 instead of the expected 30. Removing unparser 0.2.3 restores the correct behavior.

mvz avatar Aug 21 '15 09:08 mvz

More details: Instead of unparser, installing any gem with an older version that satisfies reek's current direct or indirect dependencies will trigger the behavior. For example, installing thread_safe 0.3.4 will also trigger it.

mvz avatar Aug 21 '15 09:08 mvz

I've been able to create a minimal test case. See https://github.com/mvz/psych-heisen-loading-demo.

The bug occurs when psych is installed as a gem, and another installed gem:

  • Loads psych using require 'yaml'.
  • Depends on another gem that has two eligible versions installed.

mvz avatar Dec 04 '15 19:12 mvz

Upgrading rubygems fixes this. This problem was probably fixed in https://github.com/rubygems/rubygems/pull/1137. Thanks, @kou, for providing the crucial hint in https://github.com/ruby-gnome2/ruby-gnome2/issues/584#issuecomment-162175271.

mvz avatar Dec 05 '15 12:12 mvz

Cool! Will confirm as soon as I get the update.

Edit: indeed, bug → gem update --system from 2.4.5.1 to 2.5.1 → no bug :)

cdlm avatar Dec 05 '15 13:12 cdlm