20

我正在尝试从 schema.rb 创建我的所有表

我使用了命令:“rake db:schema:load”

但是,这失败了,因为在我的一个初始化程序中,它引用了一个显然不存在的模型/表(因为数据库为空)

我可以注释掉这些行,然后再次运行 schema:load,但还有其他选择吗?

4

2 回答 2

42

可能最快的方法是将有问题的初始化程序移动到应用程序外部的临时目录,然后运行您的模式加载。但是,如果这不起作用,或者由于某种原因不是一个选项,您总是可以通过创建一个简单的 rails 应用程序来执行架构加载来解决这个问题:

  1. 创建一个新的 Rails 应用程序:rails new (app)-fixer
  2. 将您的gemfile(除非有特定例外)复制到修复程序应用程序。
  3. 将您的database.yml配置复制到修复程序应用程序。
  4. 将您的schema.rb文件复制到修复程序应用程序。
  5. 根据您的应用程序的需要执行所有适当的“捆绑安装”命令。
  6. 然后运行"rake db:drop db:create db:schema:load"

这将根据您当前的模式从头开始构建一个新数据库。

于 2013-02-23T00:29:29.433 回答
8

您可以在初始化程序中添加对表存在的检查。

if TheModel.table_exists?
  // do something with the model
end
于 2013-02-23T03:41:38.183 回答