Ruby on rails rake db:迁移不工作,没有错误

Ruby on rails rake db:迁移不工作,没有错误,ruby-on-rails,rake,migrate,Ruby On Rails,Rake,Migrate,我正在尝试运行rakedb:migrate,这是为了删除一些列并添加一些其他列而进行的迁移。 以下是我正在尝试运行的迁移: class Demographics < ActiveRecord::Migration def change change_table :demographics do |t| t.remove_column :demographics, :race t.remove_column :demographics, :o

我正在尝试运行rakedb:migrate,这是为了删除一些列并添加一些其他列而进行的迁移。 以下是我正在尝试运行的迁移:

     class Demographics < ActiveRecord::Migration
        def change
    change_table :demographics do |t|
    t.remove_column :demographics, :race
    t.remove_column :demographics, :other_race
    t.integer :race_id
    t.integer :other_race_id
    t.remove :demographics, :education
    t.integer :education_id

    t.remove :other_education
    t.integer :other_education_id

end
end
end
class Demographics
以下是:rake db:migrate status--trace的输出

调用数据库:迁移(第一次) **调用环境(第一次) **执行环境 **调用数据库:加载配置(第一次) **执行db:load\u config **执行数据库:迁移 **调用数据库:_转储(第一次) **执行db:_转储 **调用db:schema:dump(第一次) **调用环境 **调用db:load\u config **执行db:schema:dump 雷克流产了! 不知道如何构建任务“状态” /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/task_manager.rb:49:in`[]' /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:148:in'invoke_task' /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:106:在“顶层的块(2层)”中 /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:106:in'each' /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:106:在“顶级块”中 /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:115:在“使用线程运行”中 /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:100:“顶级” /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:78:在“运行中的块”中 /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:165:在“标准异常处理”中 /var/lib/gems/2.0.0/gems/rake-10.1.1/lib/rake/application.rb:75:in'run' /var/lib/gems/2.0.0/gems/rake-10.1.1/bin/rake:33:in`' /usr/local/bin/rake:23:在“装载”中 /usr/local/bin/rake:23:in``在这里输入代码`
在migrate命令中不需要
状态

rake aborted!
    Don't know how to build task 'status'
rakedb:migrate

应该足够了

由于命令中的状态,您实际上从
rake
中得到一个错误:

rake aborted!
    Don't know how to build task 'status'
编辑

经过我们的讨论,我现在了解更多

迁移<代码>人口统计过去已应用于数据库。它的14位日期时间包含在
schema\u migrations
表中,这证明了这一点

迁移设计为只运行一次。他们对数据库(模式和/或数据)进行更改,然后您继续

当您运行
rake db:migrate
时,它会发现任何尚未应用于数据库的迁移(按照迁移文件名的日期时间顺序),应用它,然后在
schema\u migrations
中为datatime添加一个条目。任何在
schema\u migrations
中已经有条目的迁移都将被忽略

如果要对数据库进行进一步更改(甚至是对在以前的迁移中创建的表),则应创建一个新的迁移,然后使用
bin rake db:migrate
应用它

是的,您可以撤消以前应用的迁移-
rake db:rollback
。回滚将按应用迁移的相反顺序应用,即从
schema\u迁移的末尾向后工作。默认情况下,它只会退出上一次迁移,不过您可以使用
步骤
参数执行更多操作(例如
rake db:rollback STEP=3

您还可以使用可选的步骤参数再次执行以前应用的迁移-
rake db:migrate:redo
。这实际上只是回滚和迁移的快捷方式

建议

我的建议是将
人口统计
迁移文件恢复到更改前的状态。如果将来需要重新应用迁移,这一点很重要

现在,我将创建一个新的迁移,以将更改应用于您的表:

rails生成用于iegnkeysindemographics的迁移

进行必要的修改;您只需提及对表所做的更改:

e、 g

用于IEGNKEYSINDEMOGRAPHICS的类
并应用此新迁移:

rakedb:migrate

我建议您阅读一下Rails迁移指南;因为它比我的简短总结更好地解释了一切

脚注:
当您想在统计表中添加外键时,您可能需要考虑<代码> AddioRebug < /C> >而不是<代码> AddioStule。我没有在上面的示例中包括这一点,因为我不知道其他表的详细信息,但它在Rails指南中有很好的文档记录。

我发现您的命令有一个问题:
rake db:migrate status--trace

您正试图用一个命令实现两件事,即运行迁移以及使用执行的详细步骤检查迁移的状态

您可以通过两种方式完成: 1。第一条路

要执行迁移,请使用

rakedb:migrate--trace

然后检查应用程序中所有迁移的
状态
,使用

rake数据库:迁移:状态class UseForiegnKeysInDemographics < ActiveRecord::Migration
  def change
    remove_column :demographics, :race
    remove_column :demographics, :other_race
    remove_column :demographics, :education
    remove_column :demographics, :other_education

    add_column :demographics, :race_id,            :integer
    add_column :demographics, :other_race_id,      :integer
    add_column :demographics, :education_id,       :integer
    add_column :demographics, :other_education_id, :integer
  end
end