我有一个引导任务,我打算以db:reset
和db: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
,因为它被列为先决条件?
答案 0 :(得分:2)
看起来db:reset正在中止,因为您有待处理的迁移。由于db:reset将使用db:schema:load来使用db / schema.rb文件来重置数据库,因此您不应该真正需要运行迁移。
你可以做的是把db:migrate 放在 db:reset之前 - 这会运行迁移,更新你的schema.rb文件,这样db:reset会在重置数据库时使用更新后的版本(从而避免了挂起的迁移错误)。