使用延迟作业保存导入gmail联系人

时间:2013-03-01 11:31:00

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

我正在导入gmail联系人,一些用户拥有大量的联系人,需要很长时间才能保存在数据库中。如何在延迟作业中异步使用后台运行。 我正在使用delay_job gem

这是我写的代码

token = Google::Authorization.exchange_singular_use_for_session_token(params[:token])
unless token == false
  @contacts = Google::Contact.all(token)      
  @contacts.each do |contact|
    next if contact.email.nil?
    c = {
      :user_id => current_user.id,
      :source => 'gmail',
      :name => contact.name,
      :email => contact.email
    }
    c = Contact.find_or_initialize_by_email(c[:email])
    c.update_attributes(c)
  end
end

1 个答案:

答案 0 :(得分:1)

在Gemfile中添加这些宝石

gem 'ghazel-daemons'
gem 'delayed_job'

然后运行

bundle install

rails g delayed_job:active_record

rake db:migrate

然后使用延迟作业提供的延迟方法在后台运行该过程

c = Contact.find_or_initialize_by_email(c[:email])
c.delay.update_attributes(c)

使用命令

从项目根目录启动延迟作业流程
rake jobs:work

要在部署后自动启动/停止/重启,请参阅文档 https://github.com/collectiveidea/delayed_job/wiki/Rails-3-and-Capistrano

有关如何使用延迟作业方法的更多选项,您可以查看此页面https://github.com/collectiveidea/delayed_job