如何自编译 Gemfile 中包含的 ruby 扩展:为 Gitlab 构建 charlock_holmes?

How to self-compile a ruby extension that is included in a Gemfile: building charlock_holmes for Gitlab?

我 运行 安装 GitLab on my ArchLinux server. GitLab depends on charlock_holmes 以获得 ICU 支持。每次我更新系统时,这种支持都会中断,因为我的 ICU 版本比 GitLab/charlock_holmes 使用的更新。

我不是 ruby 程序员,但我查看了源代码,发现扩展只是针对当前 libicu 编译的。然而,在 upgrade guide 之后执行 bundle install 更新所有的宝石。这似乎不会再次构建扩展。

最后,运行更新后,我得到了这样的错误:

/home/git/gitlab/vendor/bundle/ruby/2.2.0/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:247:in `require': libicui18n.so.53: cannot open shared object file: No such file or directory - /home/git/gitlab/vendor/bundle/ruby/2.2.0/extensions/x86-linux/2.2.0/charlock_holmes-0.6.9.4/charlock_holmes/charlock_holmes.so (LoadError)

这是意料之中的事情:

$ pacman -Q icu
icu 54.1-1

我现在正在寻找在升级到新版本时简单地执行额外步骤的方法,该新版本将针对新 libicu 编译 charlock_holmes 版本。只要这些版本没有重大变化需要 charlock_holmes 首先更新,这应该不是问题,不是吗?

刚刚花了点时间弄明白了,现在就开始吧。 我假设 GitLab 指南中使用的安装路径。请注意,我不是 Ruby 开发人员,我不知道这是否是正确的方法,但它对我有用。

如果您使用的是 2.2.0 以外的 Ruby 版本,请修复该问题。 charlock_holmes 版本也是如此。

rm -rf /home/git/gitlab/vendor/bundle/ruby/2.2.0/extensions/x86_64-linux/2.2.0/charlock_holmes-0.6.9.4

sudo -u git -H bundle exec gem install charlock_holmes -- --with-icu-dir=/usr/lib/icu