我有一个Sidekiq工作者,旨在执行社交活动(例如:Facebook上的类似页面) . 部分原因是需要知道所喜欢对象的URL .
幸运的是,Rails 3通过在任何类或模块中包含 Rails.application.routes.url_helpers
来访问path / url helper方法,可以轻松访问特定于应用程序的路由 .
我遇到的问题是我的Sidekiq工作人员无法访问我的默认URL /端口,尽管我在 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 Worker 阶级没有影响 . 我该如何为这些类定义 default_url_options
?
2 回答
我们做的是这样的:
在您的配置文件(例如config / application.rb,config / production.db等)中,有一行设置默认值:
我发现了一个潜在的解决方案,虽然感觉有点像黑客 . 我肯定愿意接受更好的答案 .
首先,在我的环境文件中(例如:
config/environments/development.rb
),我为控制器指定了default_url_options
:然后在我的worker类中,我在那里定义一个
default_url_options
实例方法: