bundle install results in “mapping values are not allowed in this context” error

久未见 提交于 2019-12-12 01:35:55

问题


I have a rails 4 project that has been working for some time. I attempted to install taps but got an error message:

$ gem install taps

/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/psych.rb:370:in `parse': (<unknown>): mapping values are not allowed in this context at line 2 column 29 (Psych::SyntaxError)
    from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/psych.rb:370:in `parse_stream'
    from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/psych.rb:318:in `parse'
    from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/psych.rb:245:in `load'
    from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/config_file.rb:333:in `load_file'
    from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/config_file.rb:198:in `initialize'
    from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/gem_runner.rb:74:in `new'
    from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/gem_runner.rb:74:in `do_configuration'
    from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/gem_runner.rb:39:in `run'
    from /usr/local/rvm/rubies/ruby-2.2.1/bin/gem:21:in `<main>'

I get the same error message when trying to run gem list or bundle update. I searched for similar problems, and it seems the cause is typically an improperly formatted YAML file. My database.yml file and Gemfile were not recently updated, so I don't know when this bug was introduced.

I found a rails issue on Github that describes this error, and someone recommended parsing YAML files with irb to isolate the issue. I tried parsing database.yml and Gemfile:

config/database.yml

# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
#
default: &default
  adapter: sqlite3
  pool: 5
  timeout: 5000

development:
  <<: *default
  database: db/development.sqlite3

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: db/test.sqlite3

production:
  <<: *default
  database: db/production.sqlite3
$ irb -ryaml
2.2.1 :001 > YAML.load_file 'config/database.yml'
 => {"default"=>{"adapter"=>"sqlite3", "pool"=>5, "timeout"=>5000}, "development"=>{"adapter"=>"sqlite3", "pool"=>5, "timeout"=>5000, "database"=>"db/development.sqlite3"}, "test"=>{"adapter"=>"sqlite3", "pool"=>5, "timeout"=>5000, "database"=>"db/test.sqlite3"}, "production"=>{"adapter"=>"sqlite3", "pool"=>5, "timeout"=>5000, "database"=>"db/production.sqlite3"}} 

Gemfile

source 'https://rubygems.org'

gem 'rails',                   '4.2.2'
gem 'faker',                   '1.4.2'
gem 'will_paginate',           '3.0.7'
gem 'bootstrap-will_paginate', '0.0.10'
gem 'bootstrap-sass',          '3.2.0.0'
gem 'sass-rails',              '5.0.2'
gem 'uglifier',                '2.5.3'
gem 'coffee-rails',            '4.1.0'
gem 'jquery-rails',            '4.0.3'
gem 'turbolinks',              '2.3.0'
gem 'jbuilder',                '2.2.3'
gem 'devise',                  '3.5.6'

group :development, :test do
  gem 'sqlite3',     '1.3.9'
  gem 'byebug',      '3.4.0'
  gem 'web-console', '2.0.0.beta3'
  gem 'spring',      '1.1.3'
end

group :test do
  gem 'minitest-reporters', '1.0.5'
  gem 'mini_backtrace',     '0.1.3'
  gem 'guard-minitest',     '2.3.1'
end

group :production do
  gem 'pg',             '0.17.1'
  gem 'rails_12factor', '0.0.2'
end
$ irb -ryaml
2.2.1 :001 > YAML.load_file 'Gemfile'
 => "source 'https://rubygems.org'\n\ngem 'rails',                   '4.2.2' gem 'faker',                   '1.4.2' gem 'will_paginate',           '3.0.7' gem 'bootstrap-will_paginate', '0.0.10' gem 'bootstrap-sass',          '3.2.0.0' gem 'sass-rails',              '5.0.2' gem 'uglifier',                '2.5.3' gem 'coffee-rails',            '4.1.0' gem 'jquery-rails',            '4.0.3' gem 'turbolinks',              '2.3.0' gem 'jbuilder',                '2.2.3' gem 'devise',                  '3.5.6'\ngroup :development, :test do gem 'sqlite3',     '1.3.9' gem 'byebug',      '3.4.0' gem 'web-console', '2.0.0.beta3' gem 'spring',      '1.1.3' end\ngroup :test do gem 'minitest-reporters', '1.0.5' gem 'mini_backtrace',     '0.1.3' gem 'guard-minitest',     '2.3.1' end\ngroup :production do gem 'pg',             '0.17.1' gem 'rails_12factor', '0.0.2' end" 

Both files parse correctly, so I am stuck. I don't know why the commands keep failing since the error message doesn't identify the offending file.


回答1:


I was finally able to track down the source of this error.

rubygems/config_file.rb:

SYSTEM_WIDE_CONFIG_FILE = File.join SYSTEM_CONFIG_PATH, 'gemrc'
...
system_config = load_file SYSTEM_WIDE_CONFIG_FILE

I tried parsing my .gemrc file and it failed:

$ irb -ryaml
2.2.1 :001 > YAML.load_file '/home/ubuntu/.gemrc'
Psych::SyntaxError: (/home/ubuntu/.gemrc): mapping values are not allowed in this context at line 2 column 29
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/psych.rb:370:in `parse'
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/psych.rb:370:in `parse_stream'
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/psych.rb:318:in `parse'
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/psych.rb:245:in `load'
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/psych.rb:464:in `block in load_file'
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/psych.rb:464:in `open'
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/psych.rb:464:in `load_file'
        from (irb):1
        from /usr/local/rvm/rubies/ruby-2.2.1/bin/irb:11:in `<main>'

Somehow, two lines became joined in my ~/.gemrc:

install: --no-rdoc --no-ri
update: --no-rdoc --no-rigem: --no-rdoc --no-ri

Separating them back out resolved the problem:

install: --no-rdoc --no-ri
update: --no-rdoc --no-ri
gem: --no-rdoc --no-ri

Since my .gemrc file is not under my project's revision control, I was seeing the error no matter which historical commit I checked out.



来源:https://stackoverflow.com/questions/35920892/bundle-install-results-in-mapping-values-are-not-allowed-in-this-context-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!