Come si applica una patch per Ruby on Rails?
-
06-09-2019 - |
Domanda
Mi piacerebbe applicare la patch action_mailer menzionati in questo thread, ma non ho mai applicato una patch prima e io non sono sicuro di come questi lavori: https://rails.lighthouseapp.com/projects/8994/tickets/2263
La mia azione mailer gemma è qui: /opt/ruby-enterprise-1.8.6-20090421/lib/ruby/gems/1.8/gems/actionmailer-2.3.2
presumo ho bisogno di andare a quella directory ed eseguire il comando patch ... qualcosa di simile?
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
Una cosa che non sono davvero chiare su anche è che il file di patch si riferisce alla directory "ActionMailer" ma il mio si chiama "ActionMailer-2.3.2"
Soluzione
In genere non si vuole correggere la fonte gemma stessa. È probabile che si voglia congelare le gemme in ${RAILS_ROOT}/vendor/rails
, e quindi applicare la patch a livello locale.
Dal tuo $ {} RAILS_ROOT dir, scaricare tutti i vostri rotaie gemme in vendor / rotaie
rake rails:freeze:gems
Applicare la patch
cd vendor/rails/
patch -p1 < 0001-Fix-implicit-multipart-mailer-views-when-RAILS_ROOT.patch
Altri suggerimenti
La risposta di Micholson sopra funziona. Ma per rattoppare la gemma reale per tutte le applicazioni Rails (vedi il mio commento sulla sua risposta) questo ha funzionato:
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
ho scoperto che si può anche invertire una patch con -R se qualcosa va storto. Sono sorpreso questo processo non era meglio documentato da qualche parte. Speriamo che questo si trasformerà in ricerche di Google per le persone nuove per l'applicazione di patch come me.
Ecco un guscio di one-liner per patching una gemma:
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 altro esempio utilizzando gist
gemma:
patch -d "$(gem env gemdir)"/gems/gist-* -p1 < <(curl -s https://github.com/defunkt/gist/commit/5843e9827f529cba020d08ac764d70c8db8fbd71.patch)