使用Rake在Shopify中创建webhook

时间:2016-09-26 08:31:20

标签: ruby-on-rails ruby shopify ruby-on-rails-5

目前,如果我从我的应用程序添加/删除webhook,为了反映shopify应用程序,用户必须重新安装该应用程序。我需要一种方法来避免这种情况,所以我认为我会使用rake。

为此,我正在使用Rails ShopifyAPP。我的应用使用Rails 5。

配置/ application.rb中:

...

config.after_initialize do
  Rails.application.load_tasks
  Rake::Task['shopifyapp:shopify_webhooks'].invoke
end

...

LIB /任务/ shopify_webhooks.rake:

namespace :shopifyapp  do
  desc "create webhooks in shopify"
  task :shopify_webhooks do
    ShopifyApp.configure do |config|
      config.webhooks = [
        {topic: 'carts/update', address: 'https://some-external-address', format: 'json'},        
      ]
    end
    puts "works" # outputs when server restarts
  end
end

我的第6感觉告诉我rake文件有些不对劲。我错过了什么吗?有什么问题? Webhooks没有创建。

如果我在config/initializers/shopify_app.rb中添加新的网络挂钩,则仅在重新安装该应用时才有效。

2 个答案:

答案 0 :(得分:0)

由于您拥有商店的有效身份验证令牌,因此您在rake任务中只需连接到商店,然后使用API​​创建webhook。这很容易做到。

driver

我认为这更像是如何使用rake而不是尝试在rake任务中模仿Rails。

答案 1 :(得分:0)

@David Lazar是正确的,但对于像我这样的菜鸟来说并不是那么清楚。我希望所有连接的商店能够获得我需要的更新,以便首先从数据库获得所有连接的商店:

namespace :shopifyapp  do
  desc "create webhooks in shopify"
  task :shopify_webhooks do
    Shop.all.each do |s|
      domain = s.shopify_domain
      token = s.shopify_token

      ShopifyAPI::Base.activate_session(ShopifyAPI::Session.new(domain, token))
      ShopifyAPI::Webhook.create(
        topic: 'carts/update',address: 'https://foo ...,
      )
    end
  end
end

现在我可以从控制台或服务器重启时运行rake任务!尼斯。如果我有成千上万的用户(商店),不确定性能。