"DRAGONFLY: couldn't marshal decode string - got incompatible marshal file format (can't be read)"

"DRAGONFLY: couldn't marshal decode string - got incompatible marshal file format (can't be read)"

在 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

return总是光秃秃的"Not found."

这是在 Dragonfly gem 更新后出现的(它带来了一个小的 Fog 更新),但我不明白这是怎么引起的,除非配置文件被严重破坏。 Rspec 测试 运行,但使用 Capybara 从服务器请求页面的 Cucumber 功能失败(因为它们刚刚获得 "Not found.")

这类似于“rake test and error : log writing failed. "\xE2" from ASCII-8BIT to UTF-8”,但该问题的可接受答案只是,"figure out what's generating the UTF-8 string and fix its encoding,",我没有很好的线索来弄清楚是什么生成了字符串。

预计到达时间:蜻蜓更新确实是问题所在。我退回更新,然后逐步完成 their update guide,虽然我仍然从服务器获得相同的响应,但 Dragonfly 现在正在记录到 Rails 记录器,而且我'我得到

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

所以 Dragonfly 在某种程度上是罪魁祸首。

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

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”中发现的错误完全相同("given" Marshal 版本不同),但那里的解决方案对我没有帮助。

也许你有一些非标准的美式英语字符。

你可以使用

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

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

最后看来问题可能出在某种未刷新的缓存上。我将 b运行ch 搁置了几天以处理其他问题,期间我在其他 b运行ch 上多次停止并重新启动开发服务器。当我回到这个 b运行ch 时,我回滚到 Dragonfly 升级之前,然后 运行 我想做的所有其他 gem 更新,最后做了 Dragonfly 升级,following the upgrade instructions。这次我没有问题。

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