【问题标题】:Shopify API calls not working in Rails background jobShopify API 调用在 Rails 后台作业中不起作用
【发布时间】:2017-01-25 21:36:04
【问题描述】:

在我的 Rails 控制器操作中,我有一个方法可以执行大量 Shopify API 调用。像: ShopifyAPI::Product.all()

ShopifyAPI::Product.find(:all, params: {title: title})

ShopifyAPI::Product.create(title: title, body_html: description, images: images, tags: tags, product_type: product_type)

所有这些都符合我的要求...非常整洁。

问题是我要上传一个 CSV 文件并使用这个控制器方法。如果我有 8 个订单项,那很好,但很快它就会变慢。所以,我想,让我们将其移至后台工作人员。

我正在使用 Redis/Resque 让一切正常运行并使用一些虚拟输出(即puts 'Hi there champ!')我已经确认后台工作程序配置正确并在何时何地执行。整洁。

然后我将我的控制器动作的点点滴滴放入并输出。在我点击 Shopify API 调用之前,这一切都有效。我可以在任何对象上调用.new,但是当我尝试.find.all.create 任何有效对象(在我将其抽象到后台作业之前有效)时,它有点死了.超级描述!我尝试通过loggerputs 输出正在发生的事情,但我似乎无法生成正在发生的事情的太多输出,但我已将其隔离到 Shopify API 工作.我认为,即使我有一个指定我的密码、站点、API 密钥、机密等的初始化程序,我可能需要按照their setup docs here 重新初始化我的 Shopify 会话。我要么做错了,要么确实解决了问题。

在这一点上,我确定我只是在文档中遗漏了一些东西,但我无法从我的后台工作中找出如何进行这些必要的 API 调用。关于我可能做的明显错误的任何想法可以解决这个问题吗?有人处理过类似的事情吗?

【问题讨论】:

    标签: ruby-on-rails shopify background-process


    【解决方案1】:

    原来这与 Shopify 引擎的安装位置有关。在我的routes.rb 中,我有以下内容(除了其他路线;这是两条相关的路线):

    mount ShopifyApp::Engine, at: '/'
    root to: 'products#index'
    

    这一切都很好,但是有点强制您的 Shopify API 调用的上下文在 products.rb 索引控制器操作的上下文中进行......没有一些更改。两种方法可以做到这一点,一种显然是更多的 Railsy 方法:

    选项 1:

    包括

    session = ShopifyApp::SessionRepository.retrieve(1)
    ShopifyAPI::Base.activate_session(session)
    

    在您要在其中进行 Shopify API 调用的任何文件的开头。这将设置会话(假设您只有 1 个商店,顺便说一下……这是使用检索方法来检索商店 1。有风险的假设),对 API 进行身份验证,并且生活中的一切都很好。

    选项 2:

    胜利的类继承。让所有进行 API 调用的控制器都从 ShopifyApp::AuthenticatedController 继承。这使得初始化程序真正工作,就是这样。这是(回想起来)清晰而明显的方法。有订单控制器吗? class OrdersController < ShopifyApp::AuthenticatedController 并完成:order = ShopifyAPI::Order.find(params[:id]) 完全符合您的预期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 2014-04-28
      • 1970-01-01
      • 2016-12-25
      相关资源
      最近更新 更多