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:
- Ecrire entrée de blog
- Push-to-git à distance
- 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 ]
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é. –
:) merci! ... et heureux de voir que vous l'avez résolu. –