你如何在铁轨上应用补丁到红宝石?

Bri*_*ong 14 ruby patch rubygems ruby-on-rails

我想应用此线程中提到的action_mailer补丁,但我之前从未应用过补丁,我不确定这些是如何工作的:https: //rails.lighthouseapp.com/projects/8994/tickets/2263

我的动作邮件宝石在这里:/opt/ruby-enterprise-1.8.6-20090421/lib/ruby/gems/1.8/gems/actionmailer-2.3.2

我假设我需要去那个目录并运行patch命令......这样的事情?

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
Run Code Online (Sandbox Code Playgroud)

我还不太清楚的一件事是补丁文件是指"actionmailer"目录,但是我的名字叫做"actionmailer-2.3.2"

rni*_*son 11

您通常不想修补宝石源本身.您可能希望冻结宝石${RAILS_ROOT}/vendor/rails,然后在本地应用补丁.

从$ {RAILS_ROOT}目录中,将所有rails gems转储到vendor/rails

rake rails:freeze:gems
Run Code Online (Sandbox Code Playgroud)

应用补丁

  cd vendor/rails/ 
  patch -p1 < 0001-Fix-implicit-multipart-mailer-views-when-RAILS_ROOT.patch
Run Code Online (Sandbox Code Playgroud)


Bri*_*ong 8

Micholson的答案有效.但要修补所有rails应用程序的实际gem(请参阅我对他的回答的评论),这有效:

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
Run Code Online (Sandbox Code Playgroud)

我发现如果出现任何问题,你也可以用-R反转补丁.我很惊讶这个过程在某个地方没有更好的记录.希望这会出现在谷歌搜索新的修补程序,像我一样.