通过delayed_job使用Gibbon gem时出错?

时间:2011-05-09 22:55:13

标签: ruby-on-rails ruby-on-rails-3 delayed-job

没有delayed_job,这段代码运行正常;如果我包含delayed_job,我会在工作人员的每次尝试中得到uninitialized constant EmailNewsletter::Gibbon的错误。

Rails 3.0.7,Gibbon 0.1.5(用于处理MailChimp的宝石),delayed_job 2.1.4。

控制器

def subscribe
  email = params[:email]
  EmailNewsletter.subscribe(email)
  render(:update) do |page|
    page << "...view update code..."
  end
end

LIB / email_newsletter.rb

module EmailNewsletter
  def self.subscribe(email)
    g = Gibbon::API.new('api_key_here', :id => 'list_id_here')
    g.listSubscribe(:email_address => email)
  end
end

使用上面的代码,如果我向/ subscribe发布电子邮件地址,一切正常。我想合并delayed_job,以便我的应用程序不会感到慢,如果MailChimp花了太长时间才能响应。

控制器

def subscribe
  email = params[:email]
  EmailNewsletter.delay.subscribe(email)
  render(:update) do |page|
    page << "...view update code..."
  end
end

看起来这份工作进入delayed_job表就好了。 handler数据为:

--- !ruby/struct:Delayed::PerformableMethod 
object: !ruby/module EmailNewsletter
method_name: :subscribe
args: 
- email@example.com

一秒钟之后,工作人员将其选中并运行,我收到错误:uninitialized constant EmailNewsletter::Gibbon

application.rb包括config.autoload_paths += %W(#{Rails.root}/lib)

我做错了什么?

修改

为了澄清,引发错误的行是

g = Gibbon::API.new('api_key_here', :id => 'list_id_here')

我也试过

g = ::Gibbon::API.new('api_key_here', :id => 'list_id_here')

2 个答案:

答案 0 :(得分:2)

它找不到Gibbon libs

require 'gibbon' #in the module to help it find it

-7个月后,但是嘿

或者更好的是,没有Gibbon :: API类,Gibbon本身就是类,而不是模块。

api = Gibbon.new("abc123-us2")

答案 1 :(得分:0)

您是否在gemfile中包含了delayed_job gem。你能尝试一次。

 gem 'delayed_job'