2010-10-11 15 views
0

J'ai une application Rails avec des entrées de blog que je veux mettre à jour à partir d'un repo Blog.git séparé.Déterminer quels fichiers git ont changé en utilisant Ruby?

J'imagine mon flux de travail comme quelque chose comme:

  1. Ecrire entrée de blog
  2. Push-to-git à distance
  3. cap Appel deploy: mise à jour, qui invoquera une tâche Rake de mettre à jour la base de données toute modification ou nouvelle entrée

L'attelage recherche ici les fichiers qui ont été modifiés. Je voudrais exploiter Git pour cela, et je sais que je pourrais faire un peu de scripts awk ou Perl sur git diff.

Mais y a-t-il un meilleur moyen? J'ai brièvement regardé Grit mais je n'arrive pas à trouver une bonne solution.

Mise à jour: Il s'avère que Grit est la meilleure solution à ce problème, du moins autant que je sache. Voici ce que j'ai utilisé pour résoudre le problème:

desc 'Posts all entries to database' 
task :post_all do 
    Dir.chdir REPO do 
    Grit::Repo.new('.').tree.contents.each do |file| 
     # post_entry cleans up my blog entries and posts them via Post.create() 
     post_entry(file.data, :text) unless file.basename =~ /\.gitignore/ 
    end 
    end 
end 

desc 'Posts all new or changed entries to database' 
task :post_new do 
    Dir.chdir REPO do 
    Grit::Repo.new('.').head.commit.diffs.each do |diff| 
     post_entry diff.b_blob.data, :text 
    end 
    end 
end 

desc 'Deletes entries from database' 
task :remove_all do 
    Post.destroy_all 
end 

desc 'Synchronizes the remote blog repo and the database' 
task :sync => [ :remove_all, :post_all ] 

Répondre

2

est une base de données vraiment nécessaire? Découvrez la gemme jekyll. des centaines (sinon des milliers) de blogs simples l'utilisent, y compris deux des miens.

http://github.com/mojombo/jekyll

autrement, grain est une bonne solution. Je l'ai utilisé pour quelques choses et ça marche bien.

+0

J'ai commencé à utiliser Toto (par Alexis Sellier) parce que je voulais une solution minimaliste. Cependant, je veux être en mesure de trier mes entrées sur un coup de tête et aussi d'associer tous mes autres modèles avec des articles (parce que cela commence seulement comme un blog - il deviendra probablement quelque chose de plus grand). Cela dit, j'ai compris mon propre problème, mais je vais vous donner les points parce que Jekyll est juste une bonne chose (tm). À votre santé. –

+0

:) merci! ... et heureux de voir que vous l'avez résolu. –