2014-07-24 19 views
2

當我有很多產品(3000和22000變種)時,添加新的庫存地點需要幾個小時,因爲Spree正在爲每個變種創建庫存項目。如何優化在Spree中添加新的庫存位置?

在此期間變體表被鎖定,整個系統無法使用。有沒有一些解決方法,或者它可以修復Spree的某個新版本?

我正在使用spree 2.0.3。

+0

不幸的是,創建與產品/變體/分類羣相關的庫存位置有幾個嚴重的性能問題。我用這個拉取請求改善了其中的一個,https://github.com/spree/spree/pull/4636然而,還有很多更多的優化可以做到。我不知道現在有什麼方法可以在沒有一些駭客(如禁用關聯觸摸)的情況下快速創建,這是一個直接創建事物的巨大SQL語句,或者花費一些時間來改善Spree的性能。 – gmacdougall

回答

1

我面臨同樣的問題,使用大於400K的變體,無法添加新的庫存位置。所以,我在ruby中創建一個腳本,併爲所有變體寫入一個插入語句到一個sql文件。你必須在不propagate_all_variants創建庫存位置

# lib/create_stock_items.rb 

begin 
    file = File.open("stock_items.sql", "w") 
rescue IOError => e 
    puts e 
end 

file.write("INSERT INTO spree_stock_items (stock_location_id, variant_id, backorderable) VALUES \n") 
variants = Spree::Variant.all.pluck(:id) 
lenght = variants.count 

variants.each_with_index do |variant, index| 
    if index+1 == lenght 
    file.write("(#{stock_location_id}, #{variant}, false); \n") 
    else 
    file.write("(#{stock_location_id}, #{variant}, false), \n") 
    end 
end 

file.close 

然後運行捆綁高管軌道亞軍的lib/create_stock_items.rb -e生產。這將在Rails根路徑中創建一個stock_items.sql文件,並最終直接在BD(rails dbconsole)上加載該sql。

我知道這是一個小黑客,但對我來說非常快速的解決方案。

相關問題