【发布时间】:2013-02-02 06:26:41
【问题描述】:
我有一个 Sidekiq 工作人员,旨在执行社交活动(例如:喜欢 Facebook 上的页面)。其中一部分需要知道被赞对象的 URL。
幸运的是,Rails 3 通过在需要访问 path/url 辅助方法的任何类或模块中包含 Rails.application.routes.url_helpers 来轻松访问特定于应用程序的路由。
我遇到的问题是,我的默认 url/端口无法从我的 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:缺少要链接的主机!请提供 :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?
【问题讨论】:
标签: ruby-on-rails routing worker sidekiq