【问题标题】:rake tasks fail with invalid byte sequence in US-ASCIIrake 任务因 US-ASCII 中的无效字节序列而失败
【发布时间】:2013-04-03 13:37:55
【问题描述】:

升级到 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

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

我无法运行任何 rake 任务 - 它给出了相同的错误。

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

【问题讨论】:

  • 在项目中随机搜索文件后。我决定因为错误消息没有为问题指定文件名,所以它可能与 rake 本身有关。删除包含用于数据库启动的硬编码数据的 rake 任务解决了该问题。

标签: ruby-on-rails ruby rake bundler asset-pipeline


【解决方案1】:

添加

#encoding: utf-8 

到您的 Rakefile 的第一行(或任何包含奇怪字符的文件)

【讨论】:

  • 但是我如何找到那个文件呢?
  • 不,问题文件不是 Rakefile。那会很容易!有问题的是我的 rake 任务之一。
  • 可以使用file命令识别编码:Rakefile: UTF-8 Unicode English text vs Rakefile: ASCII text
  • @timofei7 是的,但由于 ASCII 文本实际上是 UTF-8 的子集,因此设置 UTF-8 应该始终有效 - 当然,除非文件具有奇怪的编码。
  • 显示所有文件及其当前编码的好命令是find . -exec file {} \;
【解决方案2】:

通过一次删除一个来追踪有问题的 rake 文件。

lib/tasks/delete_me.rake

下的文件

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

即,

vim lib/tasks/delete_me.rake :设置文件编码=utf-8 :wq

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

【讨论】:

    【解决方案3】:

    第一次运行

    $ sudo gem install magic_encoding
    

    然后进入文件夹运行

    $ magic_encoding
    

    准备好了!

    【讨论】:

      【解决方案4】:

      确保您没有以罗马字(日语)输入文件。或者其他一些非 US-ASCII 语言的英文字符设置。

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

      【讨论】:

      • @BrenoSalgado 他很可能在他的文件顶部添加了正确的编码,或者从他的种子文件中删除了字符。
      • @BrenoSalgado 是的,我只是删除了我用罗马字输入的字符,切换回美国英语并重新输入。
      【解决方案5】:

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

      我会向 bitnami 发送一封电子邮件,让它以某种方式进行更改

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

          这个错误出现在一个新项目上,我正在设置它的开发环境来工作。

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

          所以,这个有问题的任务是从另一个文件(也有 UTF-8 编码)中提取数据。错误仍然存​​在。

          所以,而不是按原样读取文件(即File.read("myfile.rb")

          我改成:

          File.read("myfile.rb", :encoding =&gt; 'utf-8'),按照this solution 的指示,一切顺利。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-06
            • 1970-01-01
            相关资源
            最近更新 更多