捆绑安装结果在“映射值在该上下文中不被允许”错误 [英] bundle install results in "mapping values are not allowed in this context" error
问题描述
我有一段已经工作了一段时间的rails 4项目。我尝试安装水龙头
,但收到错误消息:
$ gem安装水龙头
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/psych.rb:370:in`parse':(< unknown>) :在此上下文中不允许映射值位于/usr/local/rvm/rubies-2.2.1/lib/ruby/2.2.0/psych中第2行第29列(Psych :: SyntaxError)
处。 rb:370:在`parse_stream'
from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/psych.rb:318:in`parse'
从/usr/local/rvm/rubies-2.2.1/lib/ruby/2.2.0/psych.rb:245:in`load'
从/ usr / local / rvm / rubies / ruby- 2.2.1 / lib / ruby / site_ruby / 2.2.0 / rubygems / config_file.rb:333:在`load_file'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/ site_ruby / 2.2.0 / rubygems / config_file.rb:198:在`initialize'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/ gem_runner.rb:74:在`new'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygem s / gem_runner.rb:74:在`do_configuration'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/gem_runner.rb:39:在'run'中
从/usr/local/rvm/rubies/ruby-2.2.1/bin/gem:21:in'< main>'
在运行 gem list
或软件包更新时,会得到相同的错误消息
。我搜索类似的问题,看起来原因通常是格式不正确的YAML文件。我的 database.yml
文件和 Gemfile
最近没有更新,所以我不知道什么时候引入了这个错误。
我在Github上发现了一个导轨问题,并且有人建议使用 irb
来解析YAML文件以找出问题。我试着解析 database.yml
和 Gemfile
:
config / database.yml
#SQLite版本3.x
#gem install sqlite3
#
#确保SQLite 3 gem在您的Gemfile中定义
#gem'sqlite3'
#
默认值:& default
适配器:sqlite3
pool:5
timeout:5000
开发:
<<<:* default
数据库:db / development.sqlite3
#警告:当您运行rake时,定义为test的数据库将被删除,
#从开发数据库重新生成。
#不要将此db设置为与开发或生产相同。
test:
<:lt::* default
database:db / test.sqlite3
产品:
<:lt::default * b $ b数据库:db / production.sqlite3
$ irb -ryaml
2.2.1:001> YAML.load_file'config / database.yml'
=> {default=> {adapter=>sqlite3,pool=> 5,timeout=> 5000},development=> {adapter=> ,pool=> 5,timeout=> 5000,database=>db / development.sqlite3},test=> {adapter=>sqlite3 pool=> 5,timeout=> 5000,database=>db / test.sqlite3},production=> {adapter=>sqlite3 => 5,timeout=> 5000,database=>db / production.sqlite3}}
Gemfile
来源'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-reporter', '1.0.5'
gem'mini_backtrace','0.1.3'
gem'guard-minitest','2.3.1'
结束
组:生产do
gem'pg','0.17.1'
gem'rails_12factor','0.0.2'
end
$ irb -ryaml
2.2.1:001> YAML.load_file'Gemfile'
=> sourcehttps://rubygems.org'\\\
\\\
gem'rails','4.2.2'gem'faker','1.4.2'gem'will_paginate','3.0.7'gem'bootstrap- '5.0.2'宝石'uglifier','2.5.3'宝石'咖啡栏',' 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:开发,:测试做宝石'sqlite3','1.3.9'宝石'byebug','3.4.0'宝石'网络控制台','2.0.0.beta3'宝石'春','1.1.3'结束\group:test do gem'minitest-reporter','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
这两个文件都能正确解析,所以我被卡住了。我不知道为什么命令保持失败,因为错误消息不能识别有问题的文件。
能够追踪此错误的来源。rubygems / config_file.rb:
SYSTEM_WIDE_CONFIG_FILE = File.join SYSTEM_CONFIG_PATH,'gemrc'
...
system_config = load_file SYSTEM_WIDE_CONFIG_FILE
我试着解析我的.gemrc文件,结果失败:
$ irb -ryaml
2.2.1:001> YAML.load_file'/home/ubuntu/.gemrc'
Psych :: SyntaxError:(/home/ubuntu/.gemrc):映射值不允许在第2行第29列的
从/ usr / local / rvm / rubies / ruby-2.2.1 / lib / ruby / 2.2.0 / psych.rb:370:从/usr/local/rvm/rubies-2.2解析
。 1 / lib / ruby / 2.2.0 / psych.rb:370:来自/usr/local/rvm/rubies-2.2.1/lib/ruby/2.2.0/psych的`parse_stream'
。 rb:318:在`parse'$ / $ b $ / 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:在`open'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2。 0 / psych.rb:464:在'load_file'中
来自(irb):1
来自/usr/local/rvm/rubies/ruby-2.2.1/bin/irb:11:in` < main>'
不知何故,两条线加入我的〜/ .gemrc:
install:--no-rdoc --no-ri
update:--no-rdoc --no-rigem:--no-rdoc --no-ri
将它们分开解决问题:
install:--no-rdoc --no-ri
update:--no-rdoc --no-ri
gem:--no-rdoc --no-ri
由于我的.gemrc文件不在我的项目的版本控制之下,无论我检出哪个历史提交,我都会看到错误。
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.
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.
这篇关于捆绑安装结果在“映射值在该上下文中不被允许”错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!