Naveen Agarwal
Naveen Agarwal

Reputation: 579

Ruby and rails yaml parser error for database.yml

Environment Rails 3.2.14 Ruby 1.9.3p448 Ubuntu 12.04 bundler version 1.3.5

There is some problem with the way ruby 1.9.3 is loading the YAML. If I dry up the code in databse.yml file the rails console, server, generate etc commands fails. If I remove those defaults then everything works fine.

I have tried psych parser and syck parser. Its just the error trace is different in syck parser, but problem persists.

Below is just the example. Actual configuration is different. causes error when database.yml is something like this:

default: &default
  host: localhost
  ...

development:
  << *default
  pool: 5
  ...

Works totally fine when database.yml file is something like this:

development:
  host: localhost
  pool: 5

Below is the error trace:

/home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:246:in `block in visit_Psych_Nodes_Alias': Unknown alias: production (Psych::BadAlias)
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:246:in `fetch'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:246:in `visit_Psych_Nodes_Alias'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/visitor.rb:15:in `visit'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/visitor.rb:5:in `accept'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:20:in `accept'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:264:in `block in revive_hash'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:258:in `each'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:258:in `each_slice'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:258:in `revive_hash'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:141:in `visit_Psych_Nodes_Mapping'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/delayed_job-4.0.0/lib/delayed/psych_ext.rb:133:in `visit_Psych_Nodes_Mapping_with_class'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/visitor.rb:15:in `visit'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/visitor.rb:5:in `accept'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:20:in `accept'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:273:in `block in revive_hash'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:258:in `each'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:258:in `each_slice'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:258:in `revive_hash'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:141:in `visit_Psych_Nodes_Mapping'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/delayed_job-4.0.0/lib/delayed/psych_ext.rb:133:in `visit_Psych_Nodes_Mapping_with_class'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/visitor.rb:15:in `visit'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/visitor.rb:5:in `accept'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:20:in `accept'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:238:in `visit_Psych_Nodes_Document'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/visitor.rb:15:in `visit'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/visitor.rb:5:in `accept'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:20:in `accept'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych/nodes/node.rb:35:in `to_ruby'
    from /home/naveen/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/psych.rb:128:in `load'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/railties-3.2.13/lib/rails/application/configuration.rb:115:in `database_configuration'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/activerecord-3.2.13/lib/active_record/railtie.rb:78:in `block (2 levels) in <class:Railtie>'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/activesupport-3.2.13/lib/active_support/lazy_load_hooks.rb:36:in `instance_eval'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/activesupport-3.2.13/lib/active_support/lazy_load_hooks.rb:36:in `execute_hook'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/activesupport-3.2.13/lib/active_support/lazy_load_hooks.rb:26:in `block in on_load'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/activesupport-3.2.13/lib/active_support/lazy_load_hooks.rb:25:in `each'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/activesupport-3.2.13/lib/active_support/lazy_load_hooks.rb:25:in `on_load'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/activerecord-3.2.13/lib/active_record/railtie.rb:74:in `block in <class:Railtie>'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/railties-3.2.13/lib/rails/initializable.rb:30:in `instance_exec'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/railties-3.2.13/lib/rails/initializable.rb:30:in `run'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/railties-3.2.13/lib/rails/initializable.rb:55:in `block in run_initializers'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/railties-3.2.13/lib/rails/initializable.rb:54:in `each'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/railties-3.2.13/lib/rails/initializable.rb:54:in `run_initializers'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/railties-3.2.13/lib/rails/application.rb:136:in `initialize!'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/railties-3.2.13/lib/rails/railtie/configurable.rb:30:in `method_missing'
    from /home/naveen/workspace/econveyance/EconveyancePro3/config/environment.rb:6:in `<top (required)>'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `require'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `block in require'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:236:in `load_dependency'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `require'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/railties-3.2.13/lib/rails/application.rb:103:in `require_environment!'
    from /home/naveen/.rvm/gems/ruby-1.9.3-p448@EconveyancePro3/gems/railties-3.2.13/lib/rails/commands.rb:40:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

  ...

Below is the complete database.yml file. If I uncomment the commented part then this error shows up. where as with ruby 1.8.7 and rails 2.3.x everything was working fine.

development: &development
  adapter: mysql2
  database: <%= $dev_main_database %>
  username: root
  password:
  timeout: 60000
  host: <%= $dev_linux_machine_name %>
  encoding: utf8

test:
  adapter: mysql2
  database: ecpmain_test
  username: root
  password:
  timeout: 60000
  host: tecpdb
  encoding: utf8

staging: &staging
  adapter: mysql2
  database: ecpmain_staging
  username: sa
  password: woofer8
  timeout: 60000
  host: <%= $staging_database_host %>
  encoding: utf8

production: &development
  adapter: mysql2
  database: <%= $dev_main_database %>
  username: root
  password:
  timeout: 60000
  host: <%= $dev_linux_machine_name %>
  encoding: utf8

# background_process_development:
#   <<: *development

# background_process_staging:
#   <<: *staging

# background_process_production:
#   <<: *production

doc_finals_development: &doc_finals_development
  adapter: mysql2
  database: <%= $dev_docs_database %>
  username: sa
  password: woofer8
  timeout: 60000
  host: <%= $dev_linux_machine_name %>
  encoding: utf8

doc_finals_test:
  adapter: mysql2
  database: ecpdocs_test
  username: sa
  password: woofer8
  timeout: 60000
  host: tecpdb
  encoding: utf8

doc_finals_staging: &doc_finals_staging
  adapter: mysql2
  database: ecpdocs_staging
  username: sa
  password: woofer8
  timeout: 60000
  host: <%= $staging_database_host %>
  encoding: utf8

doc_finals_production: &doc_finals_production
  adapter: mysql2
  database: ecpdocs_production
  username: sa
  password: nash!@w
  timeout: 60000
  host: pecpdb3
  encoding: utf8

# doc_finals_background_process_development:
#   <<: *doc_finals_development

# doc_finals_background_process_staging:
#   <<: *doc_finals_staging

# doc_finals_background_process_production:
#   <<: *doc_finals_production

logging_development: &logging_development
  adapter: mysql2
  database: <%= $dev_logging_database %>
  username: sa
  password: woofer8
  timeout: 60000
  host: <%= $dev_linux_machine_name %>
  encoding: utf8

logging_test:
  adapter: mysql2
  database: ecplogging_test
  username: sa
  password: woofer8
  timeout: 60000
  host: tecpdb
  encoding: utf8

logging_staging: &logging_staging
  adapter: mysql2
  database: ecplogging_staging
  username: sa
  password: woofer8
  timeout: 60000
  host: <%= $staging_database_host %>
  encoding: utf8

logging_production: &logging_production
  adapter: mysql2
  database: ecplogging_production
  username: sa
  password: nash!@w
  timeout: 60000
  host: pecpdb3
  encoding: utf8

# logging_background_process_development:
#   <<: *logging_development

# logging_background_process_staging:
#   <<: *logging_staging

# logging_background_process_production:
#   <<: *logging_production

Upvotes: 2

Views: 5455

Answers (3)

Maru
Maru

Reputation: 1

I was getting the same error but the bad alias was for development instead of production

The way I solved the issue was by commenting the following lines in my config/webpack.yml file

optimization:
<<: *development

Upvotes: 0

DongGE
DongGE

Reputation: 11

I was use defaults, the problem was reslove.

Upvotes: 0

Eugene
Eugene

Reputation: 4879

I see no problem with the syntax you have there. The error you have posted seems to indicate you have mistakenly done this somewhere:

development:
  << *production
  pool: 5

Can you post the complete database.yml file that has the problem? Redact it as much as you need, but I think the problem lies somewhere in the data that wasn't posted.

EDIT

I was correct, you were trying to make production inherit from a block that didn't exist:

production: &development
  ...

I didn't try it to verify, but it could be that ruby 1.8's YAML parser is more forgiving about these types of errors.

Anyways, I went ahead and DRYed up that file for you and made sure that it parsed correctly:

defaults: &defaults
  adapter: mysql2
  username: root
  password:
  timeout: 60000
  encoding: utf8

development: &development
  <<: *defaults
  database: <%= $dev_main_database %>
  host: <%= $dev_linux_machine_name %>

test:
  <<: *defaults
  host: tecpdb
  database: ecpmain_test

staging: &staging
  <<: *defaults
  database: ecpmain_staging
  username: sa
  password: woofer8
  host: <%= $staging_database_host %>

production: &production
  <<: *defaults
  database: <%= $dev_main_database %>
  host: <%= $dev_linux_machine_name %>

background_process_development:
  <<: *development

background_process_staging:
  <<: *staging

background_process_production:
  <<: *production

doc_finals_defaults: &doc_finals_defaults
  adapter: mysql2
  username: sa
  password: woofer8
  timeout: 60000
  encoding: utf8

doc_finals_development: &doc_finals_development
  <<: *doc_finals_defaults
  database: <%= $dev_docs_database %>
  host: <%= $dev_linux_machine_name %>

doc_finals_test:
  <<: *doc_finals_defaults
  database: ecpdocs_test
  host: tecpdb

doc_finals_staging: &doc_finals_staging
  <<: *doc_finals_defaults
  adapter: mysql2
  database: ecpdocs_staging
  host: <%= $staging_database_host %>

doc_finals_production: &doc_finals_production
  <<: *doc_finals_defaults
  database: ecpdocs_production
  username: sa
  password: nash!@w
  host: pecpdb3

doc_finals_background_process_development:
  <<: *doc_finals_development

doc_finals_background_process_staging:
  <<: *doc_finals_staging

doc_finals_background_process_production:
  <<: *doc_finals_production

logging_defaults: &logging_defaults
  adapter: mysql2
  username: sa
  password: woofer8
  timeout: 60000
  encoding: utf8

logging_development: &logging_development
  <<: *logging_defaults
  database: <%= $dev_logging_database %>
  host: <%= $dev_linux_machine_name %>

logging_test:
  <<: *logging_defaults
  database: ecplogging_test
  host: tecpdb

logging_staging: &logging_staging
  <<: *logging_defaults
  database: ecplogging_staging
  host: <%= $staging_database_host %>

logging_production: &logging_production
  <<: *logging_defaults
  database: ecplogging_production
  username: sa
  password: nash!@w
  host: pecpdb3

logging_background_process_development:
  <<: *logging_development

logging_background_process_staging:
  <<: *logging_staging

logging_background_process_production:
  <<: *logging_production

Upvotes: 3

Related Questions