我有一个表,我在需要小数位的字段上使用整数,所以我试图创建一个将字段类型从整数更改为float / real的迁移。我的数据库是sqllite3,我正在使用rails3。
我跑了
rails generate migration ChangeMeasureColumnOnIngredients
创建初始迁移文件,然后将类更新为
class ChangeMeasureColumnOnIngredients < ActiveRecord::Migration def self.up change_column :ingredients, :measure, :real end
我运行了rake db:migrate并且返回正常。
当我通过我的rails应用程序插入一个值时,它没有返回小数位。我开始认为许多rails不知道'real'是什么作为数据类型,因此我将迁移更改为
change_column :ingredients, :measure, :float
然后我跑了
rake db:migrate change_measure_column_on_ingredients现在我收到以下错误
c:\Ruby192\rails3rc>rake db:migrate change_measure_column_on_ingredients (in c:/Ruby192/rails3rc) rake aborted! Don't know how to build task 'change_measure_column_on_ingredients' C:/Ruby192/lib/ruby/1.9.1/rake.rb:1720:in[]' C:/Ruby192/lib/ruby/1.9.1/rake.rb:2040:in
invoke_task' C:/Ruby192/lib/ruby/1.9.1/rake.rb:2019:inblock (2 levels) in top_level' C:/Ruby192/lib/ruby/1.9.1/rake.rb:2019:in
each' C:/Ruby192/lib/ruby/1.9.1/rake.rb:2019:inblock in top_level' C:/Ruby192/lib/ruby/1.9.1/rake.rb:2058:in
standard_exception_handling' C:/Ruby192/lib/ruby/1.9.1/rake.rb:2013:intop_level' C:/Ruby192/lib/ruby/1.9.1/rake.rb:1992:in
run' C:/Ruby192/bin/rake:31:in `'
我尝试将:float更改为:real,但我仍然遇到了这个错误。
有人可以告诉我我做错了什么吗? 我是铁杆新手,还在学习。
答案 0 :(得分:6)
你的rake调用指示rake构建任务db:migrate
,然后是任务change_measure_column_on_ingredients
,这显然不是你想要的,因为后者不是rake任务。
要运行特定迁移,您需要提供迁移的VERSION
。这是迁移名称前面的文件名中的数字。您可以像这样向上或向下迁移:
rake db:migrate:down VERSION=123456789
rake db:migrate:up VERSION=123456789
或者,您可以执行以下操作,将最后一次迁移向下移动(您还可以为此指定VERSION
):
rake db:migrate:redo
但还有其他选择。如果您运行rake --describe db:migrate
,您将获得更多信息。
答案 1 :(得分:0)
虽然在这个特定的例子中,OP发布的堆栈跟踪显示错误正在尝试同时执行两个任务,我在谷歌搜索后找到了这个页面,只是想为未来的googlers添加答案:
尝试包含RAILS_ENV=development
或RAILS_ENV=test
,因为这是我修复它的原因。
答案 2 :(得分:-4)
确保您的命令为rake db:migrate
。请注意:
和migrate