我正在导入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
答案 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