5

rake db:drop (成功) を実行し、rake db:create (成功) を実行しましたが、rake db:schema:load が原因不明の奇妙なエラーをスローしています。

** Invoke db:schema:load (first_time)
** Invoke environment (first_time)
** Execute environment
rake aborted! PG::UndefinedTable: ERROR:  relation "admins" does not exist
LINE 5: WHERE a.attrelid = '"admins"'::regclass
                                      ^
:               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                    pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
               FROM pg_attribute a LEFT JOIN pg_attrdef d
                 ON a.attrelid = d.adrelid AND a.attnum = d.adnum
           WHERE a.attrelid = '"admins"'::regclass
                AND a.attnum > 0 AND NOT a.attisdropped
             ORDER BY a.attnum

助言がありますか?

4

4 に答える 4

7

FactoryBot (FactoryGirl) を使用していて、ファクトリにモデル タイプの参照が含まれている場合は、それらが中かっこで囲まれていることを確認してください。これによりdb:schema:load、爆発が防止され、ファクトリをコメントアウトする必要がなくなります。

たとえば、車輪とエンジンを備えた Car モデルがあり、シード データに 2 種類のエンジンがあり、特性を使用してエンジンの種類を指定しているとします。

このコードは爆発しdb:schema:loadます:

FactoryBot.define do
  factory :car do
    wheels

    trait(:v8) {
      engine Engine.find_by_type('V8') 
    }

    trait(:i4) {
      engine Engine.find_by_type('I4') 
    }
  end
end

db:schema:loadこれにより、爆発が防止されます。

FactoryBot.define do
  factory :car do
    wheels

    trait(:v8) {
      engine { Engine.find_by_type('V8') }
    }

    trait(:i4) {
      engine { Engine.find_by_type('I4') }
    }
  end
end

これについての議論は次のとおりです: https://github.com/thoughtbot/factory_bot_rails/issues/134

更新: これは、ファクトリのクラスを指定するときにも発生する可能性があります。

このコードは爆発しdb:schema:loadます:

FactoryBot.define do
  factory :hot_rod, class: Car do

これにより、爆発が防止db:schema:loadされます (モデル タイプの代わりにシンボルを使用します)。

FactoryBot.define do
  factory :hot_rod, class: :car do
于 2018-01-09T19:22:43.560 に答える
2

継承したプロジェクトでこれに問題がありました。データベースからモデルをロードしていたルーティング制約に関係していました。

constraints(foobar: /#{FooBar.pluck(:name).join('|')}|other/) do

すぐに始めるために、ブロックにrakeコメントを付けてタスクを実行し、ブロックのコメントを外したところ、すべてがうまくいきました。明らかに元の質問の問題ではありませんが、読み込みの問題によるわずかに異なる問題を伴う同じエラーの修正です。

于 2016-12-22T00:19:17.087 に答える
2

理由はよくわかりませんが、rake db:schema:loadが私の FactoryGirl ファイルの 1 つに問題を抱えていました。一時的にファイルを削除し、rake db:schema:loadは正常に機能しました。

この問題は、誤って定義された FactoryGirl アソシエーションが原因でした。rake db:schema:load 中に factory girl が初期化された理由はまだわかりません。

于 2013-11-09T18:52:21.757 に答える