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

时间:2013-04-11 11:20:09

标签: ruby-on-rails ruby rake 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>'    

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

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

但它没有任何区别。

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

$ echo $LC_ALL
en_NZ.UTF-8

$ echo $LANG
en_NZ.UTF-8

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

我无法运行任何佣金任务 - 它会产生同样的错误。

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

7 个答案:

答案 0 :(得分:30)

添加

#encoding: utf-8 

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

答案 1 :(得分:5)

通过一次删除一个错误的rake文件来跟踪。

lib / tasks / delete_me.rake

下的文件

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

即。,

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

然后重新耙,你应该重新投入使用。

答案 2 :(得分:2)

首次运行

$ sudo gem install magic_encoding

然后进入该文件夹并运行

$ magic_encoding

就绪!

答案 3 :(得分:1)

确保您没有在romaji(日语)中输入您的文件。或其他非US-ASCII语言的英文字符设置。

我尝试运行rake db:seed并且遇到了类似的错误。事实证明我一直在用日语罗马字符输入我的种子文件。在处理我的项目之前,我忘记将键盘输入更改回美国。

答案 4 :(得分:1)

我有类似的问题,“错误”是我的名字:它包含一个非US-ASCII字符(ö)这是在setup.rb中打印并导致问题。我把它改成了“oe”,它工作得很好。

我会发送一封电子邮件给bitnami让它以某种方式改变

答案 5 :(得分:0)

我在尝试运行任何rake任务时遇到了类似的错误(我使用Rails 3.2和Ruby 1.9.3)。我尝试了上述所有解决方案但没有成功。后来我发现我是一个导致错误的特定宝石(在我的情况下,它是Faker宝石,几天前更新)。我删除了宝石(它没有被使用),一切都开始工作了!因此,我的建议是,如果您遇到此类问题并且此处列出的解决方案均无效,请检查每个gem的版本并查看其中是否有任何更新。尝试删除它们或设置兼容版本。

答案 6 :(得分:0)

这个错误在我正在为其开发环境设置的新项目中弹出。

这是一个引发错误的rake任务,但是在检查其文件编码时,它是UTF-8。

因此,该任务正在从另一个文件(也具有UTF-8编码)中提取数据。错误仍然存​​在。

因此,与其按原样读取文件(即File.read("myfile.rb")

我将其更改为:

File.read("myfile.rb", :encoding => 'utf-8'),按照this solution的说明进行,一切都很好。