我已经在VPS上使用乘客和nginx部署了一个rails应用程序。现在我添加了如下的迁移:
def change
add_column :order_products, :order_id, :integer
add_index :order_products, :order_id
Order.find_each do |order|
OrderProduct.where(order_number: order.order_number).find_each do |op|
op.update_attributes!(order_id: order.id)
end
end
end
我在VPS上执行了rake db:migrate
命令,但这并没有向OrderProduct表添加任何列。
db/schema.rb
包含以下内容:
create_table "order_products", force: :cascade do |t|
t.string "order_number"
t.string "item_code"
t.integer "quantity"
t.string "status"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "order_id"
end
add_index "order_products", ["order_id"], name: "index_order_products_on_order_id", using: :btree
包含order_id
列。另外,在schema_migrations
表格中,我没有看到添加的最新迁移版本。
我是否需要做任何其他事情才能使其适用于制作?
感谢您的帮助。
答案 0 :(得分:1)
你需要告诉rake你想在production
环境中运行任务:
$ RAILS_ENV=production rake db:migrate
答案 1 :(得分:0)
正如@spickermann所说,尝试使用rake db:migrate RAILS_ENV=production
如果不起作用,请尝试
rails generate migration AlterOrderProduct
def up
add_column(:order_products, :order_id, :integer)
add_index (:order_products, :order_id)
Order.find_each do |order|
OrderProduct.where(order_number: order.order_number).find_each do |op|
op.update_attributes!(order_id: order.id)
end
end
end
def down
remove_column(:order_products, :order_id, :integer)
remove_index (:order_products, :order_id)
end