2013-07-23 3 views
8

Ich habe einige Namen Routen wie diese rake routes:Zugriff auf Named Routen in Rakefile

In einem Rakefile ich einfach in der Lage sein wollen birthdays_url zu nennen, wie ich würde meiner Meinung nach.

task :import_birthdays => :environment do 
    url = birthdays_url 
end 

Aber ich erhalte eine Fehlermeldung undefined local variable or method 'birthdays_url' for main:Object

Antwort

16

Sie entweder diesen Beispielcode verwenden können, in Ihre Rechenaufgabe:

include Rails.application.routes.url_helpers 
puts birthdays_url(:host => 'example.com') 

oder können Sie dieses Beispiel-Code in Ihre Rake Aufgabe verwenden:

puts Rails.application.routes.url_helpers.birthdays_url(:host => 'example.com') 

Wenn Sie nur den Pfad Teil der URL möchten, können Sie (:only_path => true) statt (:host => 'example.com') verwenden können. Also, das würde dir nur /birthdays statt http://example.com/birthdays geben.

Sie müssen entweder die (:host => 'example.com') oder (:only_path => true) Stück, weil die Rake Aufgabe nicht, dass die Menge an Informationen nicht kennt und diesen Fehler geben, ohne es:

Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true 
+0

Ich mag keine harte Codierung des Hosts. also benutze ich 'host: YOUR-APP-NAME :: Application.config.action_mailer.default_url_options [: host]' Auf diese Weise holt es sich aus den Konfigurationsdateien. – user2726983

3

Verwendung dieses:

Rails.application.routes.url_helpers.birthdays_url 

oder weniger ausführlich zu sein:

include Rails.application.routes.url_helpers 
url = birthdays_url 
4

für Rails 4-Code mit Ihrer Domain an die umfassen Top of your Rake Aufgabe

include Rails.application.routes.url_helpers 
default_url_options[:host] = 'example.com' 
Verwandte Themen