rake db:migrate aborted!在US-ASCII上使用rake 0.9.2.2和rails 3.0.10

时间:2011-12-31 00:33:07

标签: ruby-on-rails-3 rake capistrano

最近我升级了我的宝石并开始向我的应用添加新内容,例如第三方社交网站使用omniauth gem进行身份验证。在开发环境中,一切都很好,就像一个魅力。

我正在使用capistrano部署到登台和生产服务器。基本部署很好,到目前为止工作,但是当我想在部署时进行迁移时,我遇到了非常奇怪的问题。

我从capistrano收到以下错误消息:

    [my.server.com] executing command
*** [err :: my.server.com] rake aborted!
*** [err :: my.server.com] "\xC5" on US-ASCII
*** [err :: my.server.com] 
*** [err :: my.server.com] (See full trace by running task with --trace)
    command finished in 2472ms

我四处搜索,无法找到任何相关的解决方案。我也尝试将rake gem降级回0.8.7但最终没有成功 - 同样的错误。

1 个答案:

答案 0 :(得分:1)

经过数小时的谷歌搜索和挖掘后,我发现了(我希望)可能对有类似或相同问题的人提供帮助的解决方案。

我在登台服务器上做了bundle exec rake --trace db:migrate并收到以下错误消息:

rake aborted!
"\xC5" on US-ASCII
/var/www/myapp/test.myapp.com/releases/20111230233802/config/application.rb:5:in `read'
/var/www/myapp/test.myapp.com/releases/20111230233802/config/application.rb:5:in `<top (required)>'
/var/www/myapp/test.myapp.com/releases/20111230233802/Rakefile:4:in `require'
/var/www/myapp/test.myapp.com/releases/20111230233802/Rakefile:4:in `<top (required)>'
/var/www/myapp/test.myapp.com/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load'
/var/www/myapp/test.myapp.com/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load_rakefile'
/var/www/myapp/test.myapp.com/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:501:in `raw_load_rakefile'
/var/www/myapp/test.myapp.com/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:82:in `block in load_rakefile'
/var/www/myapp/test.myapp.com/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/var/www/myapp/test.myapp.com/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:81:in `load_rakefile'
/var/www/myapp/test.myapp.com/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:65:in `block in run'
/var/www/myapp/test.myapp.com/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/var/www/myapp/test.myapp.com/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/var/www/myapp/test.myapp.com/shared/bundle/ruby/1.9.1/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/var/www/myapp/test.myapp.com/shared/bundle/ruby/1.9.1/bin/rake:19:in `load'
/var/www/myapp/test.myapp.com/shared/bundle/ruby/1.9.1/bin/rake:19:in `<main>'

所以我跳到了config/application.rb文件,找出可能导致错误的原因。该文件的第5行加载外部配置文件:

require 'yaml'
APP_CONFIG = YAML.load(File.read(File.expand_path('../app_config.yml', __FILE__)))

并且该外部文件包含UTF-8字符,而不是US-ASCII。所以我尝试了几种不同的解决方案来解决这个问题。

唯一对我有用的是在config/application.rb文件的顶部添加额外几行代码:

if RUBY_VERSION =~ /1.9/
  Encoding.default_external = Encoding::UTF_8
  Encoding.default_internal = Encoding::UTF_8
end

告诉rake使用utf-8编码加载外部文件。在那之后,一切都变得顺利,完全如预期。问题解决了!

PS。
我真的不知道为什么rake 0.9的开发人员改变了rake 0.8的先前行为,这对我来说很好,也可能对你来说很长一段时间。也许你知道为什么?我很好奇。