Ich habe eine Sidekiq Worker, die soziale Aktionen ausführen soll (z. B. wie Seiten auf Facebook). Ein Teil davon erfordert die Kenntnis der URL für das Objekt, das gemocht wird.Wie kann ich default_url_options für Sidekiq-Mitarbeiter festlegen?
Glücklicherweise macht es Rails 3 leicht, auf appspezifische Routen zuzugreifen, indem Rails.application.routes.url_helpers
in welcher Klasse oder in welchem Modul auch immer Zugriff auf die Pfad-/URL-Hilfsmethode verwendet wird.
Das Problem, das ich renne ist, dass meine Standard-URL/Port nicht von meinem Sidekiq Worker trotz verschiedener Versuche, sie in meinem development.rb
oder production.rb
zu definieren zugegriffen werden kann.
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
Wenn die recipe_url
Methode Zugriff ist, wird ein ArgumentError
mit der Meldung erhöht:
ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
Ich weiß, dass ich default_url_options
für ActionController
oder ActionMailer
in den umgebungsspezifischen Konfigurationsdateien angeben kann, zB:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_controller.default_url_options = { host: 'localhost', port: 3000 }
Allerdings scheinen diese (zu Recht) keinen Einfluss auf meine Sidekiq-Arbeiterklassen. Wie sollte ich default_url_options
für diese Klassen definieren?
Ändern der akzeptierten Antwort auf Ihre, da es offensichtlich besser für Menschen funktioniert. Vielen Dank! –