8

製品リストがページ付けされておらず、最初の10個程度の製品しかリストされていない、Spreeでの誤動作のトラブルシューティング中に、ローカル開発環境でエラーを再現しようとしましたが、最初のページの読み込みでエラーが発生しました。

ArgumentError (dump format error)

いつものように、私は最初に他の脳をチェックしました。上位の検索結果は次のとおりです:https ://github.com/rails/rails/issues/2509

そのスレッドを開始したユーザーと他のいくつかのポスターは、R​​ails3.0.9からRails3.1へのアップグレードを試みていましたが、私の場合には当てはまらないと思いました。私が実行しているSpree0.60.2アプリは、Rails3.0.9にあります。

ただし、結局のところ、ローカルホストのCookieをクリアするだけで問題は解決しました。なんで?

4

5 に答える 5

10

同じアプリのRails3.1/ Spree 0.70バージョンを含む複数のアプリケーションを開発環境で実行していて、ローカルホスト経由でそれらすべてにアクセスしているため、何らかの競合が発生したと推測します。クッキー。3.1バージョンでは、3.0.9バージョンでは食べられないクッキーが設定されています。これはおそらく、@ Fjanがここの投稿(https://github.com/rails/rails/issues/2509)で言及したことと関係があります。

このエラーを追跡しましたが、これは、セッションのFlashHashクラスがRails3.1のHashクラスから継承しないように変更されたために発生します。

実験をしました。どちらのバージョンのアプリにもログインしていなければ、一方を起動してシャットダウンし、もう一方を起動しても、どちらのバージョンでもこの問題が発生することはありません。ただし、3.0.9バージョンにログインし、そのサーバーをシャットダウンして3.1バージョンを起動すると、同じエラーが再度発生しました。部分的なトレースは次のとおりです。

activesupport(3.1.1)lib / active_support / message_verifier.rb:34:in load' activesupport (3.1.1) lib/active_support/message_verifier.rb:34:inverify'actionpack(3.1.1)lib / action_dispatch / middleware / cookies.rb:280:in []' actionpack (3.1.1) lib/action_dispatch/middleware/session/cookie_store.rb:53:inblock in unpacked_cookie_data' actionpack(3.1.1)lib / action_dispatch / middleware / session / abstract_store.rb:55:in stale_session_check!' actionpack (3.1.1) lib/action_dispatch/middleware/session/cookie_store.rb:51:in unpacked_cookie_data'rack(1.3.6)lib / Rack / session / cookie.rb:96:in extract_session_id' actionpack (3.1.1) lib/action_dispatch/middleware/session/abstract_store.rb:51:inblock in extract_session_id' actionpack(3.1.1)lib / action_dispatch / middleware / session / abstract_store.rb:55:in stale_session_check!' actionpack (3.1.1) lib/action_dispatch/middleware/session/abstract_store.rb:51:in extract_session_id'rack(1.3.6)lib / Rack / session / abstract / id.rb:43:in load_session_id!' rack (1.3.6) lib/rack/session/abstract/id.rb:32:in[]' Rack(1.3.6)lib / Rack / session / abstract / id .rb:252:in current_session_id' rack (1.3.6) lib/rack/session/abstract/id.rb:258:insession_exists? ' ラック(1.3.6)lib / Rack / session / abstract / id.rb:104:in exists?' rack (1.3.6) lib/rack/session/abstract/id.rb:114:inload_for_read! ' ラック(1.3.6)lib / Rack / session / abstract / id.rb:64:inhas_key?' actionpack (3.1.1) lib/action_dispatch/middleware/flash.rb:260:in呼び出しで確認'actionpack(3.1.1)lib / action_dispatch / Middleware / flash.rb:261:in call' rack (1.3.6) lib/rack/session/abstract/id.rb:195:incontext'ラック(1.3.6)lib / Rack / session / abstract / id.rb:190:in `call '

逆もまた真でした。3.1バージョンにログインし、そのサーバーをシャットダウンして3.0.9バージョンを起動すると、同じエラーが発生しました。部分的なトレースは次のとおりです。

activesupport(3.0.9)lib / active_support / message_verifier.rb:34:in verify'actionpack(3.0.9)lib / action_dispatch / Middleware /cookies.rb:253:in block in unpacked_cookie_data load' activesupport (3.0.9) lib/active_support/message_verifier.rb:34:in' actionpack []' actionpack (3.0.9) lib/action_dispatch/middleware/session/cookie_store.rb:68:in(3.0.9)lib / action_dispatch / middleware / session / abstract_store.rb:223:in stale_session_check!' actionpack (3.0.9) lib/action_dispatch/middleware/session/cookie_store.rb:66:in unpacked_cookie_data'actionpack(3.0.9)lib / action_dispatch / Middleware / session / cookie_store.rb:57:in extract_session_id' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:39:in load_session_id!' actionpack(3.0.9)lib / action_dispatch / middleware / session / abstract_store.rb:27:in []' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:210:in current_session_id'actionpack(3.0.9)lib / action_dispatch / Middleware / session / abstract_store.rb:239:inexists exists?' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:96:in ?' actionpack(3.0.9)lib / action_dispatch / Middleware / session / abstract_store.rb:113:in load_for_read!' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:53:in[]'actionpack(3.0.9)lib / action_dispatch / Middleware / flash.rb:178: call' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:149:in電話'

私が注目すべきは、文字通りアップグレードの過程にいる必要がないということです。この問題を再現するには、同じ名前のCookieを設定しているこれら2つのバージョンのRailsにまたがる2つのアプリを実行するだけで済みます...おそらく順番に(私の実験のように)または同時に(私は試していません)。

うまくいけば、ここにいる他の誰かが、このゆるい説明に欠けている詳細を追加するために、これよりも十分な情報に基づいた答えを提供するでしょう。それまでの間、開発中にこの問題が発生し、内部の動作を気にしない場合は、Cookieをクリアしてください(上記のスレッドで@tscolariが提案しているように:https ://github.com/rails / rails / issues / 2509)そして一緒に移動します。乾杯。

于 2012-02-04T18:06:32.650 に答える
3

本番環境にいて、ユーザーにCookieをクリアするように依頼できない場合:)-唯一の方法は、config / initializers/session_store.rbのsession_storeキーを変更することです。

解決策は良くありません、ユーザーは再ログインする必要があります。

于 2012-08-25T19:43:08.787 に答える
3

私は同じ問題に直面しました。ブラウザのCookieをクリアすると、問題が解決しました。開発モード。

于 2013-02-16T14:43:00.117 に答える
2

Cookieをクリアするとこの問題が解決します。別のブラウザでアプリを開くか、Chromeでシークレットモードを使用してみてください。問題なく動作します。

于 2012-07-08T11:07:17.293 に答える
1

Rails 3.2に移行した直後に、本番環境で同じ問題が発生しました。

@povkysによって提案されたsession_storeキーの変更は、一部のユーザー(1%未満)のみがセッションで問題を抱えていたため、私の場合は少しやり過ぎでした。

最終的に、データベース内のすべてのセッションを解析し、無効なセッションを削除するスクリプトを実行しました。それが誰かを助ける場合に備えて、ここにコードがあります:

current_id = 0
failed_count = 0
while (sessions = ActiveRecord::Base.connection.select_all("Select id, data from sessions where id > #{current_id} limit 1000")).count > 0 do
  failed_ids = []
  sessions.each do |s|
    begin
      ActiveRecord::SessionStore::Session.unmarshal(s['data'])
    rescue
      failed_count += 1
      failed_ids.push s['id']
    end
  end

  ActiveRecord::Base.connection.execute("DELETE FROM sessions WHERE id in (#{failed_ids.join ','})") unless failed_ids.empty?
  current_id = sessions.last['id']
end
failed_count
于 2014-02-01T13:11:22.990 に答える