rake任务因US-ASCII中的无效字节序列而失败

gio*_*gio 22 ruby rake ruby-on-rails bundler asset-pipeline

在升级到ruby 1.9.3之后,我的一个应用程序工作正常,但是当我尝试使用capistrano进行部署时,我尝试转换的第二个应用程序在"assets:precompile"阶段失败.这是堆栈跟踪:

    rake aborted!
    rake aborted!
    invalid byte sequence in US-ASCII
    /Users/george/.rvm/gems/ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/trace_output.rb:16:in `block in trace_on'
    /Users/george/.rvm/gems/ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/trace_output.rb:14:in `map'
    /Users/george/.rvm/gems/ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/trace_output.rb:14:in `trace_on'
    /Users/george/.rvm/gems/ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/application.rb:328:in `trace'
    /Users/george/.rvm/gems/ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/application.rb:183:in `display_error_message'
    /Users/george/.rvm/gems/ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/application.rb:169:in `rescue in standard_exception_handling'
    /Users/george/.rvm/gems/ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/application.rb:159:in `standard_exception_handling'
    /Users/george/.rvm/gems/ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/application.rb:88:in `load_rakefile'
    /Users/george/.rvm/gems/ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/application.rb:72:in `block in run'
    /Users/george/.rvm/gems/ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/application.rb:160:in `standard_exception_handling'
    /Users/george/.rvm/gems/ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/application.rb:70:in `run'
    /Users/george/.rvm/gems/ruby-1.9.3-p392@rails3211/bin/ruby_noexec_wrapper:14:in `eval'
    /Users/george/.rvm/gems/ruby-1.9.3-p392@rails3211/bin/ruby_noexec_wrapper:14:in `<main>'    
Run Code Online (Sandbox Code Playgroud)

我已经阅读了很多帖子并尝试了几个建议,但无济于事.我尝试将以下内容添加到我的gemfile顶部:

if RUBY_VERSION =~ /1.9/
  Encoding.default_external = Encoding::UTF_8
  Encoding.default_internal = Encoding::UTF_8
end
Run Code Online (Sandbox Code Playgroud)

但它没有任何区别.

我检查了LANG和LC_ALL环境变量,如下所示

$ echo $LC_ALL
en_NZ.UTF-8

$ echo $LANG
en_NZ.UTF-8
Run Code Online (Sandbox Code Playgroud)

我恐怕我根本不理解这个消息,我不知道如何识别有问题的文件.

我不能运行任何rake任务 - 它给出了同样的错误.

请注意,我可以在开发模式下完美地运行应用程序.

fot*_*nus 30

#encoding: utf-8 
Run Code Online (Sandbox Code Playgroud)

到你的Rakefile的第一行(或任何有奇怪字符的文件)

  • 没有问题文件不是Rakefile.那本来很容易!这是我遇到问题的佣金任务之一. (2认同)
  • 您可以使用`file`命令来识别编码:`Rakefile:UTF-8 Unicode英文文本vs Rakefile:ASCII文本` (2认同)

f1v*_*f1v 5

通过一次删除一个错误的rake文件来追踪它.

lib/tasks/delete_me.rake下的文件

然后重新耙或重启哪个曾经给你的问题.一旦问题消失git diff,请查看哪个文件是罪魁祸首,并使用您喜欢的编辑器更改文件的编码.

即,

vim lib/tasks/delete_me.rake:set fileencoding = utf-8:wq

然后重新耙,你应该重新服务.