加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails rake db:schema:使用新数据库加载失败

发布时间:2020-12-17 01:31:27 所属栏目:百科 来源:网络整理
导读:我运行rake db:drop(成功)并运行rake db:create(成功)但rake db:schema:load抛出一个我无法弄清楚的奇怪错误. ** Invoke db:schema:load (first_time)** Invoke environment (first_time)** Execute environmentrake aborted! PG::UndefinedTable: ERROR
我运行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:加载爆炸,你不必注释掉你的工厂.

例如,假设您有一个带轮子和引擎的Car模型,您的种子数据中有两种类型的引擎,并且使用特征来指定引擎类型.

这段代码将炸毁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:加载爆炸:

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:加载(使用符号而不是模型类型):

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读