我是RoR的新手。我想在每個訂單後運行一個自定義任務。更具體地說,我想運行一個python腳本來更新另一個站點上相同prduct的數量。RoR:如何在每個訂單後觸發一個python腳本
所以我的問題是,如何在每次訂購後觸發腳本?
謝謝
我是RoR的新手。我想在每個訂單後運行一個自定義任務。更具體地說,我想運行一個python腳本來更新另一個站點上相同prduct的數量。RoR:如何在每個訂單後觸發一個python腳本
所以我的問題是,如何在每次訂購後觸發腳本?
謝謝
您可以添加after_filter。但是這會阻止。
class OrdersController < ApplicationController
after_filter :update_product_count, :only => :new_order
def new_order
...
end
private
def update_product_count
system "python /path/to/update/script.py"
end
end
或者你也可以在後臺做(我喜歡delayed jobs寶石)
訂貨型號:
class Order < ActiveRecord::Base
private
def update_product_count order_id
# find products in this order and pass them to python script
products = Order.find(order_id).products.map(&:id)
system "python /path/to/update/script.py #{products}"
end
end
訂單控制器:
class OrdersController < ApplicationController
def new_order
order.new
...
order.save!
Order.delay.update_product_count(order.id)
end
end
你可以運行逗號像紅寶石一樣。 `python命令`,注意''之間。
如果訂單是ActiveRecord模型,則可以使用ActiveRecord callback在創建每個訂單後運行代碼。例如:
class Order < ActiveRecord::Base
after_create :update_count
private
def update_count
system "python /path/to/script.py #{self.class.count}"
end
end
如果發佈腳本可能需要很長時間,您需要生成後臺作業來運行腳本。有許多Ruby庫可以爲你管理;看看sidekiq,resque或delayed_job作爲開始。