2013-03-01 75 views
0

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

这里是代码我写

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

在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