您如何将数据库结构更改迁移到 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 如何执行此操作 — 这可以使用 up
和 down
方法,而不是 change
.
运行 您的迁移:
rake db:migrate
在 Heroku 上:
heroku run rake db:migrate
希望对您有所帮助。
例如,我有一个帖子的迁移文件:
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 如何执行此操作 — 这可以使用 up
和 down
方法,而不是 change
.
运行 您的迁移:
rake db:migrate
在 Heroku 上:
heroku run rake db:migrate
希望对您有所帮助。