我可以将系统库(例如libxml2)编译成一个我可以部署到Heroku的gem(例如nokogiri)吗?

Ben*_*eod 7 ruby-on-rails heroku libxml2 nokogiri ubuntu-10.04

Nokogiri在转换为UTF-8字符时出现问题,后者最终来自libxml2,特别是版本2.7.6,这是Ubuntu 10.04 LTS上支持的最高版本.该错误已在2.7.7及更高版本中修复,但由于我们的应用程序托管在Heroku(bamboo-ree-1.8.7堆栈,基于Ubuntu 10.04)上,我们必须使用2.7.6版本,并继续体验bug,除非:

  1. 有人可以/已经攻击了nokogiri以解决问题
  2. Canonical颠覆了Ubuntu 10.04支持的libxml2版本(和/或Heroku更新了堆栈中的libxml2)
  3. 我可以想出一种方法让nokogiri使用libxml2版本,我可以将其与应用程序捆绑在一起,以便可以部署到Heroku.

很高兴听到有关1或2的任何反馈,但很好奇3是否可行.以下是我所知道的可能性:

我的问题是,我可以在应用程序中包含更高版本的libxml2,以便在我提交它并将其推送到Heroku时,已编译的供应商宝石使用它吗?

小智 1

我不确定确切的答案,但我发现了一个针对 Nokogiri 提出的问题,这听起来像您刚刚描述的问题: https: //github.com/tenderlove/nokogiri/issues/458

其中一篇回复谈到了它们如何托管在 Heroku 上并锁定到 libxml2 2.7.6 版本,并恳求升级到 2.7.8 以解决问题:https ://github.com/tenderlove/nokogiri/问题/458#issuecomment-2600583

虽然不太可能,但可能值得联系 Heroku 看看他们能做什么(如果有的话),或者他们是否可能有任何建议?我大胆猜测他们不会更改 libxml2 版本,因为它位于锁定堆栈(Bamboo)上,但谁知道呢?