您如何将数据库结构更改迁移到 heroku postgres?

How do you migrate db structure changes to heroku postgres?

例如,我有一个帖子的迁移文件:

class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.text :text
      t.integer :ip

      t.timestamps
    end
  end
end

并想将其更改为:

class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.text :text
      t.integer :ip, :limit => 8

      t.timestamps
    end
  end
end

我要加一行吗:

change_column :posts, :ip, :limit => 8

下面这样的文件是:

class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.text :text
      t.integer :ip, :limit => 8

      t.timestamps
      change_column :posts, :ip, :limit => 8
    end
  end
end

然后运行heroku run rake --trace db:migrate

我无法理解迁移的工作原理,尤其是对生产的迁移,因此非常感谢您的帮助。

第 3.5 节中有 http://guides.rubyonrails.org/active_record_migrations.html#changing-columns 列修饰符,但未指定如何传递它们。

谢谢!

您应该创建一个单独的 迁移以在ip 列上添加限制。

生成迁移:

rails generate migration ChangeIpLimitOnPosts

在生成的迁移文件中,更新内容:

class ChangeIpLimitOnPosts < ActiveRecord::Migration
  def up
    change_column :posts, :ip, :integer, limit: 8
  end

  def down
    change_column :posts, :ip, :integer
  end
end

这里请注意:您需要在更改列时指定列类型,即使在您的情况下,您并没有更改类型。

此外,在这种情况下,如果您需要回滚,Active Record 将不知道如何撤销事务,因此您需要明确告诉 Active Record 如何执行此操作 — 这可以使用 updown 方法,而不是 change.

运行 您的迁移:

rake db:migrate

在 Heroku 上:

heroku run rake db:migrate

希望对您有所帮助。