7

アプリを 3.2 から Rails 4 にアップグレードしようとしています。現時点ではすべての宝石の競合が解決されたと思いますが、後で再び発生する可能性があることはわかっています。

「exec rails sをバンドル」してブラウザでアプリを開こうとすると、アプリのホームインデックスに移動すると、次のエラーが表示されます。

IOError (読み取り用に開かれていません)

誰でもこれを手伝ってもらえますか?どうもありがとう。

ここに私が使用した宝石リストがあります:

gem 'rails', '4.0.1'

gem 'sass-rails',   '~> 4.0.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'uglifier', '>= 1.3.0'

gem 'jquery-rails'

gem 'jbuilder', '~> 1.2'
# add these gems to help with the transition:
gem 'protected_attributes'
gem 'rails-observers'
gem 'actionpack-page_caching'
gem 'actionpack-action_caching'
gem "activerecord-session_store"

コンソールのログメッセージは次のとおりです。

Started GET "/" for 127.0.0.1 at 2013-11-06 20:16:27 +1100
Processing by HomeController#index as HTML
  PCategory Load (0.5ms)  SELECT "p_categories".* FROM "p_categories"
  Rendered home/index.html.erb within layouts/application (4.1ms)
Completed 500 Internal Server Error in 15ms

IOError (not opened for reading):
  activesupport (4.0.1) lib/active_support/json/encoding.rb:256:in `each'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:256:in `to_a'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:256:in `as_json'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:58:in `block in as_json'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:81:in 'check_for_circular_references'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:57:in `as_json'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:296:in `block in as_json'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:296:in `each'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:296:in `map'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:296:in `as_json'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:58:in `block in as_json'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:81:in g`check_for_circular_references'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:57:in `as_json'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:296:in `block in as_json'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:296:in `each'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:296:in `map'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:296:in `as_json'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:50:in `block in encode'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:81:in `check_for_circular_references'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:49:in `encode'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:306:in `block in encode_json'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:306:in `each'
  activesupport (4.0.1) lib/active_support/json/encoding.rb:306:in `map'
4

3 に答える 3

1

私は最近、この問題を自分で経験しました。数日間の試行錯誤の後、最終的に開発グループの gem のセットをコメントアウトし (幸運な推測)、各 gem を 1 つずつ再度有効にして、新しく有効にした各 gem で自分の gem セットを再構築しました。犯人は、 MetaRequest gem とその依存関係であるrack-contrib (JSONP の一部の作業を行う) であることが判明しました。

だからここに私が提案するものがあります:

  1. gem セットを空にします ( rvm gemset emptyrvm を使用している場合)
  2. Gemfile.lock ファイルの名前を Gemfile.lock.OLD に変更します (これは必要ないかもしれませんが、念のためリストに記載されています)。
  3. Gemfile で、リクエストを処理したり、JSON 作業を行ったりする可能性があると思われる gem をコメントアウトします。
  4. 実行bundle installして、コメントアウトされた gem なしで gem セットを再構築します
  5. サーバーを再起動します。それでも IOError を受け取る場合は、手順 1 ~ 5 を繰り返します。それ以外の場合は、手順 6 に進みます。
  6. コメントアウトした gem の 1 つをコメント解除します
  7. 実行bundle installして、gem とその依存関係をインストールします
  8. サーバーを再起動します。IOError が発生しない場合は、手順 6 ~ 8 を繰り返します。それ以外の場合は、最後に再度有効にした gem が原因です。
于 2013-11-19T19:57:49.767 に答える
1

私は ActiveModel Serializers gem でこれを経験しました。ActiveModel Serializers を 0.8.1 から 0.9 にアップグレードしたところ、その後は正常に動作しました。

于 2014-11-26T13:13:08.067 に答える