Shopify API调用在Rails后台作业中不起作用



在我的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密钥、机密等,我可能需要根据他们在这里的设置文档重新初始化我的Shopify会话。我要么做错了,要么解决了问题。

在这一点上,我确信我只是在文档中遗漏了一些内容,但我无法从后台工作中找到如何进行这些必要的API调用。有没有想过我可能做错了什么可以解决这个问题?有人处理过类似的事情吗?

事实证明,这与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个存储……这是使用retrieve方法来检索存储1。风险假设),通过API验证,生活中的一切都很好。

选项2:

类继承获胜让所有进行API调用的控制器继承ShopifyApp::AuthenticatedController。这使初始值设定器真正起作用,仅此而已。这是(回想起来)显而易见的方法。有订单管理员吗?class OrdersController < ShopifyApp::AuthenticatedController和完成:order = ShopifyAPI::Order.find(params[:id])做的正是你所期望的。

最新更新