【问题标题】:Using rake db:migrate inside another task leaves pending migrations在另一个任务中使用 rake db:migrate 会留下挂起的迁移
【发布时间】:2012-05-24 17:42:35
【问题描述】:

我是 rake 的新手,我正在尝试找到自动执行某些任务的方法。所以我写了我的第一个 rake 任务并且失败了:

namespace :app do
  desc "Leaves application like new"
  task :reset => :environment do
    Rake::Task['db:drop:all'].invoke
    Rake::Task['db:create:all'].invoke
    Rake::Task['db:migrate'].invoke
    Rake::Task['db:seed'].invoke
  end
end

我想知道为什么这不起作用。调用后:

rake app:reset

一切正常,我可以在屏幕上看到迁移消息,如下所示:

==  CreateGalerias: migrating =================================================
-- create_table(:galerias)
NOTICE:  CREATE TABLE will create implicit sequence "galerias_id_seq" for serial column "galerias.id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "galerias_pkey" for table "galerias"
   -> 0.1191s
==  CreateGalerias: migrated (0.1194s) ========================================

但是,最后我收到了这条消息:

You have 11 pending migrations:
  20110704052637 CreatePersonas
  20110709100632 CreateOrganizaciones
  20110709100646 CreateEventos
  20110816102451 CreateMembresias
  20110816155851 CreateCelebraciones
  20110822135820 ActsAsTaggableOnMigration
  20120410063100 CreateDocumentos
  20120507200516 CreateUsuarios
  20120515214226 ActivaUnnaccent
  20120516091228 CreateGalerias
  20120517004708 SetupHstore
Run `rake db:migrate` to update your database then try again.

不就是迁移数据库吗?为什么抱怨它?

【问题讨论】:

  • 你在开发环境吗?看起来 rake 任务正在不同的环境中运行迁移。运行 rake 任务时尝试传递 RAILS_ENV。

标签: ruby-on-rails ruby rake task dbmigrate


【解决方案1】:

请记住,db:drop:all 和 db:create:all 可在所有环境中运行,而 db:migrate 和 db:seed 则不能,因此您可能正在一个非预期的环境中迁移。尝试将 db:drop:all 更改为 db:drop 并将 db:create:all 更改为 db:create,然后运行指定特定环境的任务,例如:

rake RAILS_ENV=production app:reset

【讨论】:

  • 是的,答案是将 db:drop:all 更改为 db:dropdb:create:alldb:create。之后,rake app:reset 没有问题!
猜你喜欢
  • 2012-02-17
  • 2014-06-20
  • 2012-01-27
  • 2014-04-16
  • 2017-02-05
  • 2017-01-07
  • 1970-01-01
  • 2012-03-12
  • 2019-03-03
相关资源
最近更新 更多