Ruby on Rails中,执行rake db:schema:load导入新数据库时遇到失败问题怎么办?

更新于
2026-10-09 21:03:55
2阅读来源:SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计473个文字,预计阅读时间需要2分钟。

Ruby on Rails中,执行rake db:schema:load导入新数据库时遇到失败问题怎么办?

我在运行`rake db:drop`成功后,接着运行`rake db:create`也成功,但执行`rake db:schema:load`时抛出异常。这是一个无法解释的奇怪错误。 ruby* Invoke db:schema:load (first_time)* Invoke environment (first_time)* Execute environmentrake abort

我运行rake db:drop(成功)并运行rake db:create(成功)但rake db:schema:load抛出一个我无法弄清楚的奇怪错误.

Ruby on Rails中,执行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

以下是对它的讨论: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

本文共计473个文字,预计阅读时间需要2分钟。

Ruby on Rails中,执行rake db:schema:load导入新数据库时遇到失败问题怎么办?

我在运行`rake db:drop`成功后,接着运行`rake db:create`也成功,但执行`rake db:schema:load`时抛出异常。这是一个无法解释的奇怪错误。 ruby* Invoke db:schema:load (first_time)* Invoke environment (first_time)* Execute environmentrake abort

我运行rake db:drop(成功)并运行rake db:create(成功)但rake db:schema:load抛出一个我无法弄清楚的奇怪错误.

Ruby on Rails中,执行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

以下是对它的讨论: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