Ruby on rails 3 rake数据库:迁移中止!在US-ASCII上使用rake 0.9.2.2和rails 3.0.10

Ruby on rails 3 rake数据库:迁移中止!在US-ASCII上使用rake 0.9.2.2和rails 3.0.10,ruby-on-rails-3,rake,capistrano,Ruby On Rails 3,Rake,Capistrano,最近,我升级了我的gems,并开始向我的应用程序添加新内容,比如使用omniauth gem的第三方社交网站的身份验证。在开发环境上,一切都很好,工作起来很有魅力 我正在使用capistrano部署到临时服务器和生产服务器。到目前为止,基本部署还可以,但在部署时要进行迁移时,我遇到了一些非常奇怪的问题 我从capistrano收到以下错误消息: [my.server.com] executing command *** [err :: my.server.com] rake aborte

最近,我升级了我的gems,并开始向我的应用程序添加新内容,比如使用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,但最终没有成功——同样的错误。

经过数小时的搜索和深入研究,我找到了(我希望)可能对有类似或相同问题的人有所帮助的解决方案

我在登台服务器上执行了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>'
该外部文件包含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.

我真的不知道为什么Rake0.9的开发人员改变了Rake0.8以前的行为,这对我来说很好,可能对你来说也很好。也许你知道为什么?我很好奇。

您在部署到的服务器上使用Ruby 1.9.x,在开发服务器上使用Ruby 1.8.x?您可能想尝试rake v 0.9.2而不是0.9.2.2。此外,capistrano是否运行rake db:migrate using bundle exec?@smaty否,两者都是通过rvm使用的Ruby 1.9.2。@house9我已经尝试返回到rake 0.8.7,但没有成功,在它工作之前没有任何问题。是的,Capistrano正在使用bundle exec运行db:migrate。
if RUBY_VERSION =~ /1.9/
  Encoding.default_external = Encoding::UTF_8
  Encoding.default_internal = Encoding::UTF_8
end