0

「 https://github.com/collectiveidea/delayed_job 」からdelayed_jobに従ってください。なぜ私のdelayed_jobが何もしないのか分かりますか? 「rake jobs:work」広告を実行すると、これらのエラーが発生しました

エラー:

Company#update_count_without_delay failed with TypeError: can't convert nil into String - 2 failed attempts

終わり:

  1. 「gem 'delayed_job_active_record'」を gemfile に追加
  2. コンソールで: 「レールはdelayed_job:active_recordを生成します」
  3. コンソールで: 「rake db:migrate」

私はこの指示に従いました:

If a method should always be run in the background, you can call #handle_asynchronously after the method declaration:

class Device
  def deliver
    # long running method
  end
  handle_asynchronously :deliver
end

device = Device.new
device.deliver

モデル:

require 'json'
require 'net/http'
require 'rubygems'
require 'delayed_job'

class Company < ActiveRecord::Base
before_save :validate_fbid

scope :toplikes, order("count desc").limit(20)

attr_accessible :desc, :fbid, :name, :url, :count

url_regex = /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ 


validates :name,    :presence   => true

validates :url,     :presence   => true,
                :format     => { :with => url_regex },
                :uniqueness => { :case_sensitive => false }
validates :fbid,    :presence   => true
validates :desc,    :presence   => true

def update_count
    uri = URI("http://graph.facebook.com/" + fbid)
    data = Net::HTTP.get(uri)
    self.count = JSON.parse(data)['likes']
end

handle_asynchronously :update_count     
end 

コントローラ:

def create 
    company = Company.new(params[:company])

    if company.save 
        @message = "New company created."
        company.update_count
        redirect_to root_path
    else 
        @message = "Company create attempt failed. Please try again."
        redirect_to new_path 
    end             
  end 
  1. モデルの先頭に「require 'delayed_job'」を追加
  2. サーバーを再起動する
4

1 に答える 1