Comment appliquez-vous un patch pour Ruby on Rails?
-
06-09-2019 - |
Question
Je voudrais appliquer le correctif action_mailer mentionné dans ce fil mais je ne l'ai jamais appliqué un patch avant et je ne sais pas comment ces travaux: https://rails.lighthouseapp.com/projects/8994/tickets/2263
Mon action gem Mailer est ici: /opt/ruby-enterprise-1.8.6-20090421/lib/ruby/gems/1.8/gems/actionmailer-2.3.2
Je suppose que je dois aller à ce répertoire et lancez la commande patch ... quelque chose comme ça?
cd /opt/ruby-enterprise-1.8.6-20090421/lib/ruby/gems/1.8/gems/
wget https://rails.lighthouseapp.com/attachments/108548/0001-Fix-implicit-multipart-mailer-views-when-RAILS_ROOT.patch
patch < 0001-Fix-implicit-multipart-mailer-views-when-RAILS_ROOT.patch
Une chose que je ne suis pas vraiment clair est que le fichier patch fait référence à la « actionmailer » répertoire mais le mien est appelé « actionmailer-2.3.2 »
La solution
En général, vous ne voulez pas patcher la source de gemme lui-même. Vous aurez probablement envie de geler les pierres précieuses dans ${RAILS_ROOT}/vendor/rails
, puis appliquer le patch localement.
A partir de votre $ {} RAILS_ROOT dir, vider toutes vos pierres précieuses dans des rails fournisseurs / rails
rake rails:freeze:gems
Appliquer le patch
cd vendor/rails/
patch -p1 < 0001-Fix-implicit-multipart-mailer-views-when-RAILS_ROOT.patch
Autres conseils
La réponse de Micholson ci-dessus fonctionne. Mais pour patcher la gemme réelle pour toutes les applications Rails (voir mon commentaire sur sa réponse) cela a fonctionné:
cd /opt/ruby-enterprise-1.8.6-20090421/lib/ruby/gems/1.8/gems/actionmailer-2.3.2
wget sudo wget https://rails.lighthouseapp.com/attachments/108548/0001-Fix-implicit-multipart-mailer-views-when-RAILS_ROOT.patch
sudo patch -p2 < 0001-Fix-implicit-multipart-mailer-views-when-RAILS_ROOT.patch
sudo rm 0001-Fix-implicit-multipart-mailer-views-when-RAILS_ROOT.patch
J'ai découvert, vous pouvez aussi inverser un patch avec R si quelque chose va mal. Je suis surpris de ce processus n'a pas été mieux documenté quelque part. Espérons que cela se retrouvera dans les recherches Google pour les personnes nouvelles pour patcher comme moi.
Voici une coquille d'une doublure pour patcher un petit bijou:
patch -d "$(gem env gemdir)"/gems/actionmailer-* -p1 < <(curl -s https://rails.lighthouseapp.com/attachments/108548/0001-Fix-implicit-multipart-mailer-views-when-RAILS_ROOT.patch)
Un autre exemple en utilisant gem gist
:
patch -d "$(gem env gemdir)"/gems/gist-* -p1 < <(curl -s https://github.com/defunkt/gist/commit/5843e9827f529cba020d08ac764d70c8db8fbd71.patch)