在执行db:migrate之前执行Rake db:seed

4

每次我尝试进行数据填充时,都会收到执行 rake db:migrate 的错误提示。由于我的数据库中还没有相应的表格,所以迁移失败。请问有什么方法可以忽略这个错误并完成数据填充吗?

mmahalwy @ ~/Desktop/Code/API [56] → rake db:seed
You have 4 pending migrations:
  20141206123759 AddEsAnalyzerColumnToLanguageTable
  20141213090426 CreateTextFontView
  20141213090434 UpdateLemmaAndStem
  20141230124205 ChangeTextFontView
Run `rake db:migrate` to update your database then try again.

注意:我有一个名为structure.sql的文件,其中包含创建表和从yml中填充数据的所有SQL命令。我的迁移需要在数据/表已经存在于数据库中之后运行。

1
听起来你应该修复迁移(或从schema.rb加载)- 无法运行迁移不是一个健康的状态。 - Frederick Cheung
2
也许您可以暂时从 db/migrations 文件夹中移除未完成的迁移文件? - spickermann
2个回答

6
您可以完全绕过rake,直接进行“种子”生成。虽然我并不是在倡导这种做法,但它确实可以解决您目前的问题。
rails runner ActiveRecord::Tasks::DatabaseTasks.load_seed

如果您只需要加载 structure.sql 文件,则可以查看 db:structure:load 任务来加载它们,而不必使用填充种子数据的方法。


今天回家后我会尝试一下这个! - Mohamed El Mahallawy

4

如何将值保存到不存在的表中?rake db:migrate 的工作是在数据库中创建表。

rake db:create 创建数据库。

rake db:migrate 在数据库中创建表。

rake db:seed 基于种子数据在表中创建记录。


我有一个structure.sql文件,想要将其种入数据库,然后执行迁移操作。我编辑了我的问题以反映这一点。 - Mohamed El Mahallawy
rake db:migrate 命令还会删除表格和列。如果你使用种子功能将旧表格/列中的信息转移到新表格/列中,然后在随后的迁移中删除它们,那么你当然希望在运行迁移之前先运行种子。 - ivanreese
我不明白为什么第一次运行 rake db:setup 在填充种子数据之前没有获取必要的迁移。 - Ridhwaan Shakeel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接