Rescue.enqueue on after_commit 回调 returns 未初始化常量错误
Rescue.enqueue on after_commit callback returns uninitialized constant error
我正在配置 Resque,我想在我的 SocialMediaPost
模型的 after_commit 回调中加入一个作业。当我尝试保存我的模型实例时,出现 uninitialized constant SocialMediaPost::Postman
错误。这是我第一次从事后台工作,所以我不确定我错过了什么。我一直在关注关于此的 RailsCast 以及 Resque 存储库的自述文件。
这是我的模型SocialMediaPost
:
class SocialMediaPost < ActiveRecord::Base
belongs_to :company
belongs_to :employer
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
private
def enqueue
if self.scheduled_time
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: self.scheduled_time
}
Resque.enqueu(Postman, options)
else
post_tweet if self.twitter && self.attachment_url.blank?
post_tweet_with_media if self.twitter && self.attachment_url.present?
post_linkedin_status if self.linkedin
end
end
end
这是我的工人 Postman
(app/workers/postman.rb):
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
这是我的 resque.rake
文件:
require 'resque/tasks'
namespace :resque do
puts "Loading Rails environment for Resque"
task :setup => :environment do
ActiveRecord::Base.descendants.each { |klass| klass.columns }
end
end
您可能需要
require 'postman'
在您的 SocialMediaPost 文件的顶部。
我正在配置 Resque,我想在我的 SocialMediaPost
模型的 after_commit 回调中加入一个作业。当我尝试保存我的模型实例时,出现 uninitialized constant SocialMediaPost::Postman
错误。这是我第一次从事后台工作,所以我不确定我错过了什么。我一直在关注关于此的 RailsCast 以及 Resque 存储库的自述文件。
这是我的模型SocialMediaPost
:
class SocialMediaPost < ActiveRecord::Base
belongs_to :company
belongs_to :employer
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
private
def enqueue
if self.scheduled_time
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: self.scheduled_time
}
Resque.enqueu(Postman, options)
else
post_tweet if self.twitter && self.attachment_url.blank?
post_tweet_with_media if self.twitter && self.attachment_url.present?
post_linkedin_status if self.linkedin
end
end
end
这是我的工人 Postman
(app/workers/postman.rb):
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
这是我的 resque.rake
文件:
require 'resque/tasks'
namespace :resque do
puts "Loading Rails environment for Resque"
task :setup => :environment do
ActiveRecord::Base.descendants.each { |klass| klass.columns }
end
end
您可能需要
require 'postman'
在您的 SocialMediaPost 文件的顶部。