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

时间:2015-03-27 09:57:07

标签: ruby gem rvm

我在ArchLinux服务器上运行GitLab的安装。 GitLab依靠charlock_holmes获得ICU支持。每次我更新我的系统时,这种支持都会中断,因为我的ICU版本比GitLab / charlock_holmes使用的版本更新。

我不是一个红宝石程序员,但我看了一下源代码,发现扩展程序只是针对当前的libicu进行编译。但是,只需执行upgrade guide执行更新所有Gems的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,这应该不是问题,是吗?

1 个答案:

答案 0 :(得分:2)

花了一段时间搞清楚这一点,你走了。 我假设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