Rails rake db:migrate 问题

shadow · 2012年07月10日 · 最后由 tiseheaini 回复于 2012年07月10日 · 5768 次阅读

由于当时事出突然需要进行 rails 的项目的重新部署,原来跑项目的服务器启不起来了,在项目的重新部署是重 svn 上 checkout 最近的项目项目代码,然后执行的 rake db:migrate 的让数据库生成空表,当时一切都很正常,没有报错。

今天突然发现在项目的数据库后台报错,缺少一个表. 然后检查 migrate 的记录表,关于创建当前的表的 migrate 是有数据库记录的,但是数据库没有该表,不知道大家遇到过类似的问题没?

PS 测试了 如果删除该条记录,再次执行 rake db:migrate 数据库中 migrate 的记录表中成功插入 version 的版本号,但是 console 上什么都木有,同时数据库中没有应该建立的表。

把你的 migrate 的代码发出来看看

莫非加了rescue nil

#2 楼 @tumayun 代码 很简单

 class CreateUserRemains < ActiveRecord::Migration
  def up
    create_table :user_remains do |t|
      t.date :start_date
      t.date :end_date
      t.integer :active_udid_count
      t.integer :paid_udid_count
      t.float :sales
    end
  end

  def down
    drop_table :user_remains
  end
end

#2 楼 @tumayun 就是没的这张表 我很不淡定..

在生产环境执行这个看看结果: bundle exe rake db:migrate:status

还有,如果想重新创建环境用 bundle exec rake db:schema:load

从代码上看好像没什么错误。可能是我才疏学浅,毕竟还是小新手。 解决方法:命令行上运行 rake db:migrate VERSION=XXXXXXXXXXXX 如果你是 windows 那么就是 0,如果是 linux 那么就是 db/migrate/XXXXXXXXXXXX_XXXXX.rb 中的 XXXX 部分。是你第一次运行 db:migrate 时的数字。 意思就是撤销所有的 migrate 做的所有创建任务,然后重新执行 rake db:migrate 再创建一遍迁移任务。希望能解决你的问题。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号