如何优化在Spree中添加新的库存位置?

时间:2014-07-24 10:36:49

标签: ruby-on-rails spree

当我有很多产品(3000和22000个变种)时,添加新的库存位置需要数小时,因为Spree正在为每个变体创建库存项目。

在此期间,变体表被锁定,整个系统无法使用。是否有一些解决方法或者可能在一些新版本的Spree中修复了它?

我正在使用spree 2.0.3。

1 个答案:

答案 0 :(得分:1)

我面临同样的问题,使用> 400K变体,无法添加新的库存位置。因此,我在ruby中创建了一个脚本,并且所有变体都将一个insert语句写入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)
length = variants.count

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

file.close

然后运行bundle exec rails runner lib/create_stock_items.rb -e production。这将在stock_items.sql根路径中创建Rails文件,最后直接在SQL(rails dbconsole)上加载BD

我知道这有点黑客,但对我来说是一个非常快速的解决方案。