0

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

1 回答 1

1

在 Gemfile 中添加这些 gem

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

于 2013-03-01T14:08:41.243 回答