2013-12-11 16 views
1

我是RoR的新手。我想在每個訂單後運行一個自定義任務。更具體地說,我想運行一個python腳本來更新另一個站點上相同prduct的數量。RoR:如何在每個訂單後觸發一個python腳本

所以我的問題是,如何在每次訂購後觸發腳本?

謝謝

回答

0

您可以添加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 
0

你可以運行逗號像紅寶石一樣。 `python命令`,注意''之間。

0

如果訂單是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,resquedelayed_job作爲開始。

相關問題