GIBBON::must 在拨打电话之前设置 api_key - rails

GIBBON::must set an api_key prior to making a call - rails

我使用了一个教程来使用 mailchimp 设置我的应用程序,以便它将新订阅者发送到 mailchimp 列表。如果您按流程进行,一切都会正常进行。但是当我 运行 Rspec 我的测试套件的一半因这个错误 Gibbon::GibbonError:You must set an api_key prior to making a call 而变红。我尝试将我的 api 键设置在它显示的位置,但它不起作用?为了清楚起见,我将 post 一些代码。

Gibbon.rb:

Gibbon::API.api_key = ENV["MAILCHIMP_API_KEY"]
Gibbon::API.timeout = 15
Gibbon::API.throws_exceptions = true

工作

     class SubscribeUserToMailingListJob < ActiveJob::Base
  queue_as :default

  def perform(subscriber)
    gb = Gibbon::API.new(Figaro.env.mailchimp_api_key)
    gb.lists.subscribe({:id => ENV["MAILCHIMP_LIST_ID"], :email => {:email => subscriber.email}, :merge_vars => {:FNAME => subscriber.first_name, :LNAME => subscriber.last_name}, :double_optin => false})
  end
end

型号:

 def subscribe_user_to_mailing_list
   SubscribeUserToMailingListJob.perform_later(self)
 end

错误

 Create a subscriber Subscriber can sign in
  Failure/Error: gb.lists.subscribe({:id => ENV["MAILCHIMP_LIST_ID"],   :email => {:email => subscriber.email}, :merge_vars => {:FNAME =>   subscriber.first_name, :LNAME => subscriber.last_name}, :double_optin =>   false})

Gibbon::GibbonError:
You must set an api_key prior to making a call

我迷失在这一点上。任何帮助都会很棒!谢谢。

生成一个 MailChimp API 密钥如何开始?如果您有 MailChimp 帐户,您可以在附加菜单中轻松获得一个。

将 "MAILCHIMP_API_KEY" 替换为您在行中的密钥:Gibbon::API.api_key = ENV["MAILCHIMP_API_KEY"]

OP,我假设在你的测试中你设置了 MAILCHIMP_API_KEY env var,但 Gibbon 仍然给你错误,就好像你根本没有设置一样?

问题是 Gibbon 期望任何 API 键字符串按照 Mailchimp 的 API 键进行格式化。因此,如果在您的测试中您使用的是字符串 api_key_123,您可以 设置 使用 Gibbon::API.api_key = "api_key_123" 没有问题,但是在您尝试使用它的时候,长臂猿会表现得好像它不存在一样。而如果您使用 Mailchimp-formatted 键,例如 8472f063cf868ab9a49ccbb118c1d5f1-us15,Gibbon 将承认它的存在。

我认为你应该在你的模型中要求这样的 gem dotenv

class SubscribeUserToMailingListJob < ActiveJob::Base
  queue_as :default

  require 'dotenv'
  Dotenv.load


  def perform(subscriber)
    gb = Gibbon::API.new(Figaro.env.mailchimp_api_key)
    gb.lists.subscribe({:id => ENV["MAILCHIMP_LIST_ID"], :email => {:email => subscriber.email}, :merge_vars => {:FNAME => subscriber.first_name, :LNAME => subscriber.last_name}, :double_optin => false})
  end
end

对这个问题的跟进。主要原因是在测试环境中缺少 env 变量,即使在 before 块中模拟 env 变量,它也不会工作,因为 Gibbon 在初始化程序中设置了 API 键。作为解决这个问题而不使用真正的 API 测试环境的密钥,我们可以直接在测试块之前设置一个测试 API 就像

def before
  Gibbon::Request.api_key = 'test-us3'
end

请注意密钥中的“-”。这就是在 gem 中通过验证的技巧,已实施 here