0

resque-scheduler を使用して、Twitter API への投稿をスケジュールしています。私のデータベースには、API をクエリし、ツイートの ID でレコードを更新するメソッドを持つSocialMediaPostモデルがあります。post_tweetこのコードを resque-scheduler の外で実行すると、期待どおりに動作します。ただし、投稿をキューに入れると、if/elseブロック内のすべてがスキップされているように見えます。Twitter アカウントにアクセスすると、投稿が成功したことがわかりますが、データベース エントリを確認すると、エントリにtwitter_idtwitter_uid、またはがありませんtwitter_link

これが私のSocialMediaPostモデルです:

class SocialMediaPost < ActiveRecord::Base
    require 'open-uri'
    require 'postman'
    belongs_to :company
    belongs_to :employer
    belongs_to :identity
    validates :post, length: {in: 0..140}, if: Proc.new { |t| t.twitter }
    validates :post, length: {in: 0..256}, if: Proc.new { |t| t.linkedin }
    after_commit :enqueue

    def enqueue
        time = scheduled_time.in_time_zone("Eastern Time (US & Canada)")
        options = {
            id: self.id,
            services: JSON.parse(self.services),
            posts: JSON.parse(self.posts),
            attachment_url: self.attachment_url,
            media_url: self.media_url,
            time: scheduled_time.in_time_zone("Eastern Time (US & Canada)")
        }
        Resque.enqueue_at(time, Postman, options)
    end

    def post_tweet
        tweet = company.twitter_client.update(JSON.parse(posts)['twitter'])
        if tweet.created?
            uid = self.company.identities.find_by(provider: :twitter).uid
            self.update_columns(twitter_id: tweet.id, twitter_uid: uid, twitter_link: "https://twitter.com/#{uid}/status/#{self.twitter_id}")
        end
        tweet.created?
    end
end

ここに私の resque ワーカーがありPostmanます:

class Postman
    @queue = :social_media_posts

    def self.perform(options)
        post = SocialMediaPost.find(options['id'])
        post.post_tweet if options['services']['twitter'] && options['attachment_url'].blank?
        post.post_tweet_with_media if options['services']['twitter'] && options['attachment_url'].present?
        post.post_linkedin_status if options['services']['linkedin']
    end
end

いくつかの場所にa を挿入しようとしましたbinding.pryが、 resque はバインディングをスキップします。無限ループを作成するこのバグupdate_columnsを回避する方法として、このメソッドを使用していることに注意してください。

4

0 に答える 0