我有一个Sidekiq工作人员,旨在执行社交操作(例如:喜欢Facebook上的页面)。其中一部分需要了解被喜欢的对象的URL。如何为Sidekiq工作人员设置default_url_options?
幸运的是,Rails 3通过在任何需要访问路径/ url帮助器方法的类或模块中包含Rails.application.routes.url_helpers
,可以轻松访问特定于应用程序的路由。
我遇到的问题是,我的默认网址/端口无法从我的Sidekiq工作人员中访问,尽管尝试在我的development.rb
或production.rb
中定义它们。
class Facebook::LikeRecipeWorker
include Sidekiq::Worker
include Rails.application.routes.url_helpers
sidekiq_options queue: :facebook
def perform(recipe_id, user_id)
recipe = Recipe.find(recipe_id)
user = User.find(user_id)
if user.facebook_token
api = Koala::Facebook::API.new(user.facebook_token)
api.put_connections 'me', 'my_namespace:like', object: recipe_url(recipe)
end
end
end
当recipe_url
方法是访问,一个ArgumentError
提高与消息:
ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
我知道我可以在特定环境下的配置文件,如ActionController
或ActionMailer
指定default_url_options
:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_controller.default_url_options = { host: 'localhost', port: 3000 }
但是,这些(正确)似乎没有影响我的Sidekiq工人班。我应该如何去定义这些类的default_url_options
?
将接受的答案更改为你的答案,因为它显然对人更好。谢谢! – 2016-07-05 16:56:44