我沉浸在一个我无法解释的错误中。
该错误只发生在生产环境中,在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
方法清除缓存