Wie bringt man einen Patch auf Ruby on Rails an?
-
06-09-2019 - |
Frage
Ich würde gerne den in diesem Thread erwähnten action_mailer-Patch anwenden, habe aber noch nie zuvor einen Patch angewendet und bin mir nicht sicher, wie diese funktionieren:https://rails.lighthouseapp.com/projects/8994/tickets/2263
Mein Action-Mailer-Juwel ist hier:/opt/ruby-enterprise-1.8.6-20090421/lib/ruby/gems/1.8/gems/actionmailer-2.3.2
Ich gehe davon aus, dass ich in dieses Verzeichnis gehen und den Patch-Befehl ausführen muss ... etwa so?
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
Was mir auch nicht ganz klar ist, ist, dass sich die Patch-Datei auf das Verzeichnis „actionmailer“ bezieht, meins aber „actionmailer-2.3.2“ heißt.
Lösung
Normalerweise möchten Sie die Gem-Quelle selbst nicht patchen.Wahrscheinlich möchten Sie die Edelsteine einfrieren ${RAILS_ROOT}/vendor/rails
, und wenden Sie dann den Patch lokal an.
Legen Sie in Ihrem ${RAILS_ROOT}-Verzeichnis alle Ihre Rails-Edelsteine in Vendor/Rails ab
rake rails:freeze:gems
Wenden Sie den Patch an
cd vendor/rails/
patch -p1 < 0001-Fix-implicit-multipart-mailer-views-when-RAILS_ROOT.patch
Andere Tipps
Micholson Antwort oben genannten Arbeiten. Aber das eigentliche Juwel Patch für alle Schienen-Anwendungen (siehe meinen Kommentar auf seiner Antwort) dies funktioniert:
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
fand ich heraus, Sie können auch einen Patch mit -R umkehren, wenn etwas schief geht. Ich bin dieser Prozess überrascht wurde nicht besser irgendwo dokumentiert. Hoffentlich wird dies in Google sucht nach Menschen wiederum neue wie mich zu patchen.
Hier ist ein Shell-Einzeiler für ein Juwel Patchen:
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)
Ein weiteres Beispiel mit gist
Juwel:
patch -d "$(gem env gemdir)"/gems/gist-* -p1 < <(curl -s https://github.com/defunkt/gist/commit/5843e9827f529cba020d08ac764d70c8db8fbd71.patch)