Ruby on rails rake db:迁移不工作,没有错误
我正在尝试运行rakedb:migrate,这是为了删除一些列并添加一些其他列而进行的迁移。 以下是我正在尝试运行的迁移: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
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