如何自编译 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
我 运行 安装 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