在本地计算机上运行的迁移在Heroku上失败。错误如下:
Migrating to ChangeTypeToCast (20131112072808)
== ChangeTypeToCast: migrating ===============================================
-- add_column(:math_tests, :cast, :string)
-> 0.1006s
-- add_column(:emotional_tests, :cast, :string)
-> 0.1541s
-- remove_column(:math_tests, :type, :string)
rake aborted!
An error has occurred, this and all later migrations canceled:
PG::Error: ERROR: column "string" of relation "math_tests" does not exist
: ALTER TABLE "math_tests" DROP "string"/
迁移正在删除由早期迁移创建的列。当前和早期的迁移都列在下面:
在type
表
math_tests
列
class CreateMathTests < ActiveRecord::Migration
def change
create_table :math_tests do |t|
t.string :type
t.timestamps
end
end
end
删除type
中的math_tests
列(Heroku在第一个remove_column
行失败)
class ChangeTypeToCast < ActiveRecord::Migration
def up
add_column :math_tests, :cast, :string
add_column :emotional_tests, :cast, :string
remove_column :math_tests, :type, :string
remove_column :emotional_tests, :type, :string
end
def down
remove_column :math_tests, :cast, :string
remove_column :emotional_tests, :cast, :string
add_column :math_tests, :type, :string
add_column :emotional_tests, :type, :string
end
end
为什么会发生这种情况?
注意:正在运行heroku restart
和heroku pg:reset
无效
答案 0 :(得分:1)
我猜你正在运行与Heroku实例不同的Rails版本。
在某些版本中,您可以在删除列时指定列的类型,从而允许删除要反转的列。在其他情况下,您可以指定要从中删除列的表,然后传递要从中删除的列名列表。因此,它不是试图删除名为'type'类型'string'的列,而是尝试删除列'type'以及列'string'。
相关发行说明 - http://guides.rubyonrails.org/4_0_release_notes.html#active-record