heroku运行rake db:migrate使rake中止

时间:2014-05-21 11:36:35

标签: ruby-on-rails ruby-on-rails-3 heroku sqlite heroku-postgres

我是ruby on rails,github和heroku的新手。现在我在该项目中进行定期存款项目我在我的localhost 中使用数据库 sqlite3,在heroku中使用 postgres

我添加了一个名为 int 的字段,其数据类型为字符串,我将数据类型从字符串更改为整数。最后,我决定再次从整数更改为 float 。 在我当地的主机上工作完美。但是,当我试图在heroku中运行时,显示rake已中止。

heroku运行rake db:migrate

它显示以下错误消息

Running `rake db:migrate` attached to terminal... up, run.4356

Connecting to database specified by DATABASE_URL

Migrating to CreateFds (20140505120047)

Migrating to Changedatatypeforfd (20140506065307)


Migrating to AddMdToFds (20140506080333)

Migrating to AddIntToFds (20140506080404)

Migrating to Changedatatypeforint (20140506103001)

==  Changedatatypeforint: migrating ======================

-- change_column(:fds, :int, :integer)

rake aborted!

StandardError: An error has occurred, this and all later migrations canceled:

PGError: ERROR:  column "int" cannot be cast automatically to type integer

HINT:  Specify a USING expression to perform the conversion.
: ALTER TABLE "fds" ALTER COLUMN "int" TYPE integer

我的db文件列在下面

20140506080404_add_int_to_fds.rb

class AddIntToFds < ActiveRecord::Migration

  def change

    add_column :fds, :int, :string
  end

end

20140506103001_changedatatypeforint.rb

class Changedatatypeforint < ActiveRecord::Migration

 def up

    change_column :fds, :int, :integer

  end


  def down

    change_column :fds, :int, :string


  end

end

20140508105541_rechangedatatypeforint.rb

class Rechangedatatypeforint < ActiveRecord::Migration


  def up

    change_column :fds, :int, :float

  end


  def down

    change_column :fds, :int, :integer

  end

end

对不起我的错误。 请给我解决方案。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

Heroku使用PostgreSQL。在PostgreSQL中int是一个保留字,你不能将它用作列名。 为int名称

使用其他内容
change_column :fds, :valid_name, :integer

SQL Key Words

如果你想从float转换为整数,一种方法是:

class MigrationNameHere < ActiveRecord::Migration
  def up
    execute('ALTER TABLE fds ALTER COLUMN column_name TYPE integer USING round(column_name);')
  end
end

此迁移会将您的所有浮点数转换为整数,并且不可逆所以要小心。我建议你在做这个之前做个备份。