私は過去数か月間、4.1.6 で開発されたプロジェクトに取り組んできましたが、現在は 4.2.0 に更新しようとしています (4.1.6 から 4.2.0 までのすべてのバージョンを段階的にテストし、 4.1.x バージョンはすべてエラーなく動作し、ここで説明する問題が発生するのは 4.2.0 に移行したときだけです)。
このアプリケーションには、すべてのモデルに共通する多くの共有機能があるため、抽象クラスを作成し、すべてのモデルがこのクラスを継承しています。
class TrackableModel < ActiveRecord::Base
self.abstract_class = true
...
end
class User < TrackableModel
...
end
Gemfile の唯一の変更点はgem 'rails', '4.1.6'
、gem 'rails', '4.2.0'
アップデート プロセスは、HEREを使用した手順rake rails:update
に従っており、その後、同じドキュメントのセクション 2 にあるアップグレード手順を実行しました。
競合するすべてのファイルをこの rake タスクのデフォルトで上書きしましたが、後でそれぞれを確認して変更を加えました。
更新前はすべてのテストに合格しましたが、更新後は
130 runs, 0 assertions, 0 failures, 130 errors, 0 skips
エラーで
ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect table name '': SHOW FULL FIELDS FROM ``
Error:
xxxTest#test_yyy:
NoMethodError: undefined method `each' for nil:NilClass
アプリケーションは、ユーザー エクスペリエンスに変更を加えることなく動作するようです。テストを実行するまでは、すべて問題ないようです。
テストを実行できません。
アップデート:
私は走っていることを忘れていました
ruby 2.1.5p273 (2014-11-13 revision 48405) [i386-mingw32].
さらに、私は実行パスを追跡するために取り組んできました。フィクスチャをセットアップしようとしているときに失敗しているようです。テーブルの schema_cache を構築するループを通過しています。schema_migrations と最初のカスタム テーブル "customers" に対してクエリを実行します (この呼び出し中に、成功したように見えるこのテーブルの各列を反復処理します)。
次の呼び出しで
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.columns(table_name#String)
table_name
の値はゼロです
残念ながら、私はまだ ruby/rails に慣れていないため、table_name の値 (schema_migrations、customers、nil など) が実際に設定されている場所を見つけるのに苦労しています。
schema_cache を構築しているテーブルのリストがどこから来ているのか、誰かが指摘するのを助けることができますか?