为什么rails告诉我运行rake db:migrate?

时间:2014-01-13 05:31:00

标签: ruby-on-rails postgresql scaffold

您好我是rails的新手。 我正在使用现有的postgres数据库。我想为所有表创建CRUD。 我开始时: rails g scaffold firstTableName

然后我开始使用rails: rails s

当我导航到localhost:3000 / firstTableName时,rails会出现以下错误: 迁移正在等待中;运行'bin / rake db:migrate RAILS_ENV = development'来解决此问题。

我认为'rake db:migrate'仅用于设置数据库。我的数据库已经设置好了。如果我运行'rake db:migrate',那么我会收到firstTableName已经存在的错误。 请帮助我了解如何让铁杆快乐。 谢谢。

3 个答案:

答案 0 :(得分:1)

错误是因为您已经存在firstTableName表已经存在并且正如您所做的那样,它将为您创建模型,控制器和视图,因此它还为firstTableName创建了迁移。

如果您已经进行了迁移,请尝试在脚手架中跳过迁移

  

rails g scaffold firstTableName --skip-migration

答案 1 :(得分:0)

您的数据库应该有一个名为schema_migrations的表,其中只有一列version。然后,您应该手动将所有迁移版本写入该表。 放置在project_root/db/migrate/中的迁移和文件名中的вшпшеы与版本迁移相同。

答案 2 :(得分:0)

当您运行迁移时,rails会通过将db / migrate文件夹中的每个迁移与schema_migrations表中的条目进行匹配来跟踪这些内容,该表包含rails已在版本列中为该环境运行的所有迁移的时间戳。

原因是允许您逐步迁移。

早期版本的rails有一个强大的理念,即下移也可以追溯到时间。但是,现在这已经成为一种选择。

您的投诉是因为无法创建schema_migrations表。我的建议是允许它通过在新数据库上运行rake db:migrate来实现。

如果此实例上的表中有数据,请在另一个数据库上运行,然后只复制版本表。

http://guides.rubyonrails.org/migrations.html