2013-02-17 73 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

相關問題