为什么不将db:migrate作为先决条件调用?

时间:2012-01-09 17:33:52

标签: ruby-on-rails ruby rake

我有一个引导任务,我打算以db:resetdb:migrate作为先决条件。我这样定义:

task :bootstrap => [:environment,:"db:reset",:"db:migrate"] do ...

当我运行它时,我得到以下输出:

** Invoke bs:bootstrap (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:reset (first_time)
** Invoke db:drop (first_time)
** Invoke db:load_config (first_time)
** Invoke rails_env (first_time)
** Execute rails_env
** Execute db:load_config
** Execute db:drop
** Invoke db:setup (first_time)
** Invoke db:create (first_time)
** Invoke db:load_config
** Execute db:create
** Invoke db:schema:load (first_time)
** Invoke environment
** Execute db:schema:load
-- create_table("projects", {:force=>true})
   -> 0.0770s
-- create_table("users", {:force=>true})
   -> 0.1110s
...
** Invoke db:seed (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment
** Execute db:abort_if_pending_migrations
You have 1 pending migrations:
  20120109172252 CreateObjectives
Run "rake db:migrate" to update your database then try again.

为什么不调用db:migrate,因为它被列为先决条件?

1 个答案:

答案 0 :(得分:2)

看起来db:reset正在中止,因为您有待处理的迁移。由于db:reset将使用db:schema:load来使用db / schema.rb文件来重置数据库,因此您不应该真正需要运行迁移。

你可以做的是把db:migrate 放在 db:reset之前 - 这会运行迁移,更新你的schema.rb文件,这样db:reset会在重置数据库时使用更新后的版本(从而避免了挂起的迁移错误)。