首页 文章

Rake db:迁移错误“不知道如何构建任务”

提问于
浏览
3

我有一个表,我在需要小数位的字段上使用整数,所以我试图创建一个迁移,将字段类型从整数更改为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:ininvoke_task'
C:/Ruby192/lib/ruby/1.9.1/rake.rb:2019:in block (2 levels) in top_level'
C:/Ruby192/lib/ruby/1.9.1/rake.rb:2019:ineach'
C:/Ruby192/lib/ruby/1.9.1/rake.rb:2019:in block in top_level'
C:/Ruby192/lib/ruby/1.9.1/rake.rb:2058:instandard_exception_handling'
C:/Ruby192/lib/ruby/1.9.1/rake.rb:2013:in top_level'
C:/Ruby192/lib/ruby/1.9.1/rake.rb:1992:inrun'
C:/Ruby192/bin/rake:31:in `'

我尝试将:float更改为:real,但我仍然遇到了这个错误 .

谁能告诉我我做错了什么?我是铁杆新手,还在学习 .

3 回答

  • 0

    你的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 ,您将获得更多信息 .

  • 6

    虽然在这个特定的例子中,OP发布的堆栈跟踪显示错误正在尝试同时执行两个任务,我在谷歌搜索后找到了这个页面,只是想为未来的googlers添加答案:

    尝试包括 RAILS_ENV=developmentRAILS_ENV=test ,因为这是我修复它的原因 .

  • -4

    确保你的命令是 rake db:migrate . 注意 :migrate 之间没有任何空格

相关问题