我有一個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