Como você aplica um patch para Ruby on Rails?
-
06-09-2019 - |
Pergunta
Eu gostaria de aplicar o patch action_mailer mencionado nesta discussão, mas eu nunca ter aplicado um patch antes e eu não tenho certeza de como estes funcionam: https://rails.lighthouseapp.com/projects/8994/tickets/2263
A minha acção mailer gem está aqui: /opt/ruby-enterprise-1.8.6-20090421/lib/ruby/gems/1.8/gems/actionmailer-2.3.2
Eu suponho eu preciso ir para esse diretório e execute o comando patch de ... algo assim?
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
Uma coisa que eu realmente não estou claro sobre também é que o arquivo de correção se refere ao diretório "ActionMailer" mas o meu é chamado de "ActionMailer-2.3.2"
Solução
Você normalmente não deseja corrigir a própria fonte jóia. Você provavelmente vai querer congelar as gemas em ${RAILS_ROOT}/vendor/rails
, e, em seguida, aplicar o patch no local.
A partir do seu $ {RAILS_ROOT} dir, despejar todos os seus trilhos gemas em vendor / rails
rake rails:freeze:gems
Aplicar o patch
cd vendor/rails/
patch -p1 < 0001-Fix-implicit-multipart-mailer-views-when-RAILS_ROOT.patch
Outras dicas
A resposta de Micholson acima obras. Mas, para corrigir o gem real para todos os trilhos aplicativos (ver o meu comentário sobre a sua resposta) isso funcionou:
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
Eu descobri que você também pode reverter um patch com -R se alguma coisa der errado. Estou surpreso este processo não foi melhor documentado em algum lugar. Esperemos que isto irá transformar-se em pesquisas do Google para pessoas novo para remendar como eu.
Aqui é um shell de uma linha para remendar uma jóia:
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)
Outro exemplo usando gist
gem:
patch -d "$(gem env gemdir)"/gems/gist-* -p1 < <(curl -s https://github.com/defunkt/gist/commit/5843e9827f529cba020d08ac764d70c8db8fbd71.patch)