2013-07-23 17 views
8

Ho alcuni percorsi denominati come questo rake routes:Accesso percorsi denominati in Rakefile

In un rakefile ho semplicemente voglio essere in grado di chiamare birthdays_url come farei a mio avviso.

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

Ma io sto ottenendo un errore undefined local variable or method 'birthdays_url' for main:Object

risposta

16

È possibile utilizzare questo codice di esempio nel il tuo rake task:

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

oppure è possibile utilizzare questo codice di esempio nella tua task rake:

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

Se si desidera solo la parte del percorso URL, è possibile utilizzare al posto di (:only_path => true)(:host => 'example.com'). Quindi, questo ti darebbe solo /birthdays invece di http://example.com/birthdays.

È necessario sia il pezzo (:host => 'example.com') o (:only_path => true), perché il compito rake non sa quel po 'di informazioni e darà questo errore senza di essa:

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

Non mi piace codificare l'host. quindi uso 'host: YOUR-APP-NAME :: Application.config.action_mailer.default_url_options [: host]' In questo modo lo preleva dai tuoi file di configurazione. – user2726983

3

uso questo:

Rails.application.routes.url_helpers.birthdays_url 

o ad essere meno verbose:

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

per Rails 4 includere il codice con il tuo dominio al top of your rake task

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