3

ビューの 1 つがレンダリングにかなりの時間を要しているため、Jbuilder でフラグメント キャッシングを使用しようとしています (ビューのレンダリングのみが 2500 ミリ秒以上かかる場合があります)。

これは他の呼び出しでは機能しますが、これは機能していないようで、その理由がわかりません。2番目:これは私のローカルマシンでは機能しますが、herokuでは失敗します。

heroku のエラーは次のとおりです。

2013-09-18T21:05:46.425034+00:00 app[web.1]:   Rendered api/shop/products/_product.json.jbuilder (3.2ms) 
2013-09-18T21:05:46.606141+00:00 app[web.1]: Marshalling error for key 'shop/products/344-20130914175034924266000/shop/products/346-20130914175035358419000/shop/products/345-20130914175035153905000/en/b5262bbbd44fb696ffdece67a464e218': no _dump_data is defined for class Proc 
2013-09-18T21:05:46.606141+00:00 app[web.1]: You are trying to cache a Ruby object which cannot be serialized to memcached. 
2013-09-18T21:05:46.606141+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/dalli-2.6.4/lib/dalli/server.rb:397:in `dump' 
2013-09-18T21:05:46.606141+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/dalli-2.6.4/lib/dalli/server.rb:397:in `serialize' 
2013-09-18T21:05:46.606141+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/dalli-2.6.4/lib/dalli/server.rb:269:in `set' 
2013-09-18T21:05:46.606141+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/dalli-2.6.4/lib/dalli/server.rb:60:in `request' 
2013-09-18T21:05:46.606141+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/dalli-2.6.4/lib/dalli/options.rb:18:in `block in request'

フラグメントキャッシュを使用しようとした単純な部分は次のとおりです。

json.cache! [category[:products], I18n.locale] do
  json.products category[:products] do |product|
    json.partial! product
  end
end

そして製品部分:

json.(
  product,
  :id,
  :name,
  :picture,
  :price,
  :subcategory
)

json.product_options product.product_options do |option|
  json.(
    option,
    :id,
    :name,
    :option_type
  )

  json.option_items option.product_option_items do |item|
    json.(
      item,
      :id,
      :name
    )
  end
end

json.partial! 'api/app_styles/app_style', app_style: product.app_style
  • app_style パーシャルはどこでも使用され、他のキャッシュされたビューで機能することに注意してください
4

2 に答える 2

1

それで、深く掘り下げた後、私は最終的にそれが問題であることを発見しました

  1. rails_stdout_logging gem
  2. ペーパークリップの宝石
  3. S3 ストレージを使用したペーパークリップ構成
  4. jbuilder

これら3つの組み合わせ+ URLの代わりにペーパークリップオブジェクトを使用すると(つまり、json.node_name my_model.paperclip_attached_file.urlの代わりにjson.node_name my_model.paperclip_attached_file)、失敗しました。

今では問題なく動作しているようです…</p>

したがって、マシューは、写真が問題のあるものであると言って、的を射ていましたが、rails_stdout_gem + paperclip S3 config のみでした

于 2013-11-11T14:29:36.910 に答える
1

エラー: memcached にシリアル化できない Ruby オブジェクトをキャッシュしようとしています

これは、proc を使用してオブジェクトをマーシャリングしようとしている場所です。proc は実行時にのみ評価され、シリアル化することはできません。

それがあなたの画像属性であると推測しなければならなかった場合、おそらく動的メソッドであり、おそらくprocを使用しない新しいメソッドpicture_urlを作成すると、問題を引き起こしている属性を1つずつ削除することで確認できます。

于 2013-11-08T17:18:53.620 に答える