0

Gmail の連絡先をインポートしていますが、膨大な数の連絡先をデータベースに保存するのに時間がかかるユーザーがいます。in delay ジョブを使用してバックグラウンドで非同期に実行する方法。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

これらのgemをGemfileに追加します

gem 'ghazel-daemons'
gem 'delayed_job'

次に実行します

bundle install

rails g delayed_job:active_record

rake db:migrate

次に、delayedジョブによって提供されるdelayメソッドを使用して、プロセスをバックグラウンドで実行します

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 に答える