kir*_*ley 5 postgresql ruby-on-rails
我运行 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
Run Code Online (Sandbox Code Playgroud)
有什么建议?
如果您使用 FactoryBot (FactoryGirl) 并且您的工厂包含任何模型类型引用,请确保将它们括在花括号中。这样可以防止db:schema:load爆炸,您不必注释掉您的工厂。
例如,假设您有一个带有轮子和引擎的汽车模型,并且您的种子数据中有两种类型的引擎,并且正在使用特征来指定引擎类型。
这段代码会爆炸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
Run Code Online (Sandbox Code Playgroud)
这将防止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
Run Code Online (Sandbox Code Playgroud)
这是关于它的讨论:https : //github.com/thoughtbot/factory_bot_rails/issues/134
更新:在为工厂指定类时也会发生这种情况:
这段代码会爆炸db:schema:load:
FactoryBot.define do
factory :hot_rod, class: Car do
Run Code Online (Sandbox Code Playgroud)
这将防止db:schema:load炸毁(使用符号而不是模型类型):
FactoryBot.define do
factory :hot_rod, class: :car do
Run Code Online (Sandbox Code Playgroud)
我不完全明白为什么,但rake db:schema:load我的 FactoryGirl 文件之一出现问题。我暂时删除了文件并且rake db:schema:load工作正常。
该问题是由错误定义的 FactoryGirl 关联引起的。仍然不确定为什么 Factory Girl 在 rake db:schema:load 期间初始化。
| 归档时间: |
|
| 查看次数: |
1641 次 |
| 最近记录: |