gpt4 book ai didi

ruby-on-rails - Rails rake 数据库 :schema:load fails with new database

转载 作者:行者123 更新时间:2023-11-29 11:39:44 25 4
gpt4 key购买 nike

我运行了 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

有什么建议吗?

最佳答案

如果您使用的是 FactoryBot (FactoryGirl) 并且您的工厂包含任何模型类型引用,请确保将它们括在大括号中。这可以防止 db:schema:load 崩溃,并且您不必注释掉您的工厂。

例如,假设您有一个带有轮子和发动机的汽车模型,并且您的种子数据中有 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

关于ruby-on-rails - Rails rake 数据库 :schema:load fails with new database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19871277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com