10
votes

rendu_to_string d'une tâche de râteau

Je veux utiliser une tâche de râteau pour mettre en cache mon site de sitemap afin que les demandes de sitemap.xml ne prennent pas pour toujours. Voici ce que j'ai jusqu'à présent: xxx

mais quand j'essaie de courir ceci, je reçois une erreur: xxx

Comment puis-je rendre Un modèle à une ficelle à partir de râteau?


1 commentaires

3 Réponses :


4
votes

Il y a un POST Comment pouvoir accéder à ActionView :: Méthodes de base et contexte de la tâche Rake.

Cependant, il s'agit d'un soinyptatch. Pourquoi ne pas utiliser les rails ' Mécanisme de cache pour accomplir la mise en cache? :)

plus tard éditer: La fonction rendu_to_to_string est définie dans actionController :: contexte de base.

ci-dessous est une solution sur la manière de le faire fonctionner à partir de tâches de ratisser, extraites de omninerd . xxx


6 commentaires

Le mécanisme de cache est génial, mais parfois, vous voulez vraiment générer périodiquement le contenu hors ligne dans un fichier. Une tâche de râteau est l'endroit idéal pour cela - un bon lien.


Je ne peux pas utiliser la mise en cache parce que je ne peux pas rendre le plan du site même une fois en réponse à une requête HTTP, car elle prend plus de 30 secondes et que Heroku tia fois les demandes HTTP à 30 secondes.


Vous avez un point. Donc, l'approche du lien collé est-elle pour vous?


Cela ne fonctionne réellement pas - je reçois l'erreur "méthode non définie" rendu_to_string "pour # " (Notez que j'utilise rendu_to_string: Modèle => Quel que soit et le Post auteur fait Render: partiel => Quel que soit ). Je convertirais mon modèle en une partielle, mais c'est un .builder , lequel je ne pense pas fonctionner comme partiel? Des idées?


En fait, cela fait fonctionne lorsque je fais le .builder une partielle. Maintenant, je reçois une nouvelle erreur lorsque j'essaie d'appeler x_url (E.g., post_url ). Comment puis-je accéder aux aides générateurs d'URL?


+ Horace Loeb: Avez-vous résolu l'accès aux aides générateurs d'URL?



9
votes

Voici comment je l'ai fait:

  av = ActionView::Base.new(Rails::Configuration.new.view_path)
  av.class_eval do
    include ApplicationHelper
  end

  include ActionController::UrlWriter
  default_url_options[:host] = 'mysite.com'

  posts = Post.all

  sitemap = av.render 'sitemap/sitemap', :posts => posts
  Rails.cache.write('sitemap', sitemap)


1 commentaires

Où utilisez-vous default_url_options Hash?



1
votes

Récemment, je voulais prendre une tâche de râteau défini comme Horace Loeb mentionné et la traduisez-la en un travail de fond autonome, mais cela n'a pas facilement traduit.

Voici ma mise en œuvre pour les rails 2.3.x parce que le rails 3 implémentation A> J'ai trouvé ne fonctionnerait pas. p> xxx pré>

Ceci est disponible en tant que gist: https://gist.github.com/1386052 . p>

Ensuite, vous pouvez utiliser la classe ci-dessus pour créer une plaque offsetemplate pour rendre vos vues dans une tâche de râteau: P >

task :recent_projects => :environment do 
  template = OfflineTemplate.new(ProjectsHelper, PermissionsHelper)
  puts template.render("projects/recent", :projects => recent_projects)
end


0 commentaires