4

response.body全体をmemcachedに保存しようとしています。私はそのようにやっています:

Rails.cache.write(request.headers['HTTP_X_MEMCACHED_KEY'], response.body)

問題は、値の前にガベージが追加されることです。

o: ActiveSupport::Cache::Entry  :@compressedF:@expires_in0:@created_atf1355928410.584484:@value"GsI";s<!DOCTYPE html>...

に渡そうとしました:raw => trueRails.cache.write、falseが返され、値がmemcachedに渡されません。response.bodyが適切にエスケープされていないため、失敗したと思います。

私もこの方法を試しました:

Rails.cache.write(request.headers['HTTP_X_MEMCACHED_KEY'], Marshal.dump(response.body), :raw => true)

それは機能しますが、値にはまだいくつかのゴミがあります:

I"fD<!DOCTYPE html>...

クリーンな値をmemcachedに入れる方法は?

4

2 に答える 2

1

の Unicode 文字がエスケープされていないため、memcached がデータをキャッシュできなかったようresponse.bodyです。

今、私はresponse.body.bytes.to_a.map(&:chr).join値として渡していますが、うまくいきますが、それが最善の解決策であるかどうかはまだ疑問です.

于 2012-12-21T10:38:07.650 に答える
0

書くresponse.body.force_encoding('ASCII-8BIT')ことで解決できるかもしれません

于 2019-11-06T18:36:24.497 に答える