环境 Rails 3.2.14 Ruby 1.9.3p448 Ubuntu 12.04 bundler version 1.3.5
ruby 1.9.3加载YAML的方式存在一些问题。如果我干掉databse.yml文件中的代码,rails console,server,generate etc命令就会失败。如果我删除这些默认值,那么一切正常。
我尝试了心理解析器和syck解析器。它只是错误跟踪在syck解析器中有所不同,但问题仍然存在。
以下只是示例。实际配置不同。 当database.yml是这样的时候会导致错误:
default: &default
host: localhost
...
development:
<< *default
pool: 5
...
当database.yml文件是这样的时候,完全正常工作:
development:
host: localhost
pool: 5
以下是错误跟踪:
/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>'
...
以下是完整的database.yml文件。如果我取消注释注释部分,则会显示此错误。与ruby 1.8.7和rails 2.3.x一样,一切正常。
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
答案 0 :(得分:3)
我发现你的语法没有问题。您发布的错误似乎表明您在某处错误地执行了此操作:
development:
<< *production
pool: 5
您可以发布有问题的完整database.yml
文件吗?尽可能多地编辑它,但我认为问题出在未发布的数据中。
修改强>
我是对的,你试图让生产继承自一个不存在的块:
production: &development
...
我没有尝试验证,但可能是ruby 1.8的YAML解析器对这些类型的错误更加宽容。
无论如何,我继续为你干掉那个文件,并确保它正确解析:
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
答案 1 :(得分:0)
我当时使用defaults
,问题出在爱上。
答案 2 :(得分:0)
我遇到了同样的错误,但错误的别名是 INSERT INTO Sabbath School
VALUES
(number 1, hello, great, google.com, google.com),
而不是 development
我解决这个问题的方法是在我的 production
文件中注释以下几行
优化:
<<: *开发