我有一个Sidekiq工作进程,旨在执行社交操作(例如:在Facebook上点赞页面)。其中一部分需要知道被点赞对象的URL。
幸运的是,Rails 3通过在需要访问路径/ URL助手方法的任何类或模块中包含“Rails.application.routes.url_helpers”使访问应用程序特定路由变得容易。
我遇到的问题是,尽管尝试在我的“development.rb”或“production.rb”中定义默认的url/port,但它们无法从我的Sidekiq工作进程中访问。
当访问
幸运的是,Rails 3通过在需要访问路径/ URL助手方法的任何类或模块中包含“Rails.application.routes.url_helpers”使访问应用程序特定路由变得容易。
我遇到的问题是,尽管尝试在我的“development.rb”或“production.rb”中定义默认的url/port,但它们无法从我的Sidekiq工作进程中访问。
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: 缺少链接到的主机!请提供 :host 参数、设置 default_url_options[:host] 或将 :only_path 设置为 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
?