2013-02-17 67 views
7

我有一个Sidekiq工作人员,旨在执行社交操作(例如:喜欢Facebook上的页面)。其中一部分需要了解被喜欢的对象的URL。如何为Sidekiq工作人员设置default_url_options?

幸运的是,Rails 3通过在任何需要访问路径/ url帮助器方法的类或模块中包含Rails.application.routes.url_helpers,可以轻松访问特定于应用程序的路由。

我遇到的问题是,我的默认网址/端口无法从我的Sidekiq工作人员中访问,尽管尝试在我的development.rbproduction.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

我知道我可以在特定环境下的配置文件,如ActionControllerActionMailer指定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

回答

9

我们所做的是:

在您的配置文件(例如config/application.rb,config/production.db等)中,有一条线设置默认值:

routes.default_url_options = { host: 'www.example.org' } 
+0

将接受的答案更改为你的答案,因为它显然对人更好。谢谢! – 2016-07-05 16:56:44

3

我发现了一个潜在的解决方案,虽然它感觉像一点点黑客。我绝对乐意接受更好的答案。

首先,在我的环境文件(例如:config/environments/development.rb),我为我的控制器指定default_url_options

config.action_controller.default_url_options = { host: 'localhost', port: 3000 } 

然后在我的工人阶级,我定义了一个default_url_options实例方法有:

class Facebook::LikeRecipeWorker 
    # ... 

    private 

    def default_url_options 
    ActionController::Base.default_url_options 
    end 
end 
+0

将此标记为答案,因为没有给出其他答案。 – 2013-06-19 22:38:29

+0

我希望有更好的方法。当一个应用程序可以在多种环境下运行时 - 多个开发人员,分期,qa,beta服务器等 - 这是一个恼人的配置需要管理。如果Rails只会缓存最后一个请求attrs,并使其在任何地方都可访问,那将会更好。 – 2013-11-22 07:53:57

+0

@ paulnsorensen的回答更为正确 – Jeriko 2016-03-10 20:24:03

相关问题