Ho un lavoratore Sidekiq destinato a svolgere azioni sociali (ad es. Pagine simili su Facebook). Parte di questo richiede la conoscenza dell'URL per l'oggetto che è piaciuto.Come posso impostare default_url_options per i lavoratori Sidekiq?
Fortunatamente, Rails 3 semplifica l'accesso ai percorsi specifici delle app includendo Rails.application.routes.url_helpers
in qualsiasi classe o modulo che ha bisogno di accedere al metodo path/url helper.
Il problema che sto funzionando in è che il mio difetto url/porto non sono accessibili da dentro il mio lavoratore Sidekiq nonostante i vari tentativi di definire loro nella mia development.rb
o 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
Quando il metodo recipe_url
è gratuita, una ArgumentError
è sollevata con il messaggio:
ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
so che posso specificare default_url_options
per ActionController
o ActionMailer
nei file di configurazione specifici dell'ambiente, ad esempio:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_controller.default_url_options = { host: 'localhost', port: 3000 }
Tuttavia, questi (a buon diritto) sembrano non avere alcuna influenza le mie classi di lavoratori Sidekiq. Come dovrei andare a definire default_url_options
per queste classi?
Cambiare la risposta accettata alla tua poiché ovviamente sta funzionando meglio per le persone. Grazie! –