Rails.cache.delete中的ArgumentError(无效的UTF-8字节序列)



我沉浸在一个我无法解释的错误中。

该错误只发生在生产环境中,在DigitalOcean服务器上。Rails 5.0 Ruby 2.2.3。在开发阶段,Ubuntu运行良好,经过测试没有错误,缓存性能也很好。

问题是在生产环境中执行Rails.cache.delete_matched

我已经尝试了所有的组合,但还是无法消除这个错误。

缓存:

retorn_text=Rails.cache.fetch("Translation/#{company_id}/#{text_a_traduir}/#{head_locale}/#{locale}", expires_in: 1.year) do
...
end

after_save回调中,我想从"Translation/#{company_id}/做:

Rails.cache.delete_matched("Translation/#{company_id}/.+")

Rails.cache.delete_matched("Translation/#{company_id}/.*")

Rails.cache.delete_matched(/Translation/4/.*/)

reg_exp=/Translation/#{company_id}/.*/
Rails.cache.delete_matched(reg_exp)

和许多其他我不记得的选项…

所有这些都会抛出错误ArgumentError (invalid byte sequence in UTF-8)

谢谢

最后似乎我可以得到它的工作,我不确定如果解决方案是这两个或只有一个:

Rails.cache.delete_matched(/Translation/#{company_id}/.+/)

,

rails tmp:clear

在这个改变之后,这个TMP清除它的工作

,

一个月后,我不得不再次执行RAILS_ENV=production rails tmp:clear以避免错误。所以它没有解决,但现在,我知道比清除tmp问题暂时消失

,

没有delete_matched解决方案,即使强制转换为UTF_8 (text.encode!(Encoding::UTF_8,{invalid: :replace, replace: ""})

已解决使用delete方法而不是delete_matched方法清除缓存

最新更新