“DRAGONFLY:无法编组解码字符串 - 得到不兼容的编组文件格式(无法读取)”

时间:2015-12-24 17:27:38

标签: ruby-on-rails ruby utf-8 dragonfly-gem

在Rails 3.2.22,Ruby 2.2.2中,当我发出请求时,我得到log writing failed. "\xCB" from ASCII-8BIT to UTF-8(以及与“\ xD9”类似的错误)作为Rails日志中的唯一输出。从字面上看,这是启动并向服务器发出一个请求时的开发日志:

>> Thin web server (v1.5.0 codename Knife)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3001, CTRL+C to stop
log writing failed. "\xCB" from ASCII-8BIT to UTF-8
log writing failed. "\xD9" from ASCII-8BIT to UTF-8
log writing failed. "\xD9" from ASCII-8BIT to UTF-8

返回总是只是一个“未找到。”

这是在对Dragonfly gem更新之后出现的(它带来了一次轻微的Fog更新),但我不知道除非配置文件严重受损,否则会导致这种情况。 Rspec测试运行,但使用Capybara从服务器请求页面的Cucumber功能失败(因为它们只是“未找到”。)

这类似于“rake test and error : log writing failed. "\xE2" from ASCII-8BIT to UTF-8”,但该问题的公认答案只是“找出生成UTF-8字符串并修复其编码的内容”,而且我没有好的线索来搞清楚是什么产生了字符串。

ETA:蜻蜓更新的确是个问题。我退回更新,然后逐步完成their update guide,虽然我仍然从服务器得到相同的响应,但Dragonfly现在正在登录到Rails记录器,我正在

DRAGONFLY: couldn't json decode string - got 795: unexpected token at 'i٢'

所以蜻蜓是某种程度上的罪魁祸首。

ETA2:关注a similar issue in Dragonfly's Github repo后,我在我的Dragonfly配置中添加了allow_legacy_urls true,现在错误是这样的:

DRAGONFLY: couldn't marshal decode string - got incompatible marshal file format (can't be read)
format version 4.8 required; 105.217 given

...这几乎与“Ruby on Rails - incompatible marshal file format”中的错误完全相同(“给定的”Marshal版本不同),但那里的解决方案没有帮助我。

2 个答案:

答案 0 :(得分:0)

也许你有一些非标准的美国英语角色。

您可以使用

# -*- coding: utf-8 -*-

在ruby文件的顶部导致问题。

答案 1 :(得分:0)

最后,似乎问题可能是某种未刷新的缓存。我把分支放在一边几天来解决其他问题,在此期间我停止并在其他分支上多次重启开发服务器。当我回到这个分支时,我回到了Dragonfly升级之前,然后运行了我想要做的所有其他宝石更新,最后进行了Dragonfly升级natural_key。这次我没有问题。

所以我最好的猜测是,从不完整的升级中遗留了缓存项(或缓存映射),这些项基本上使缓存无效,导致报告的错误。