如何在Heroku上安装charlock_holmes依赖libicu-dev

时间:2013-09-20 22:01:36

标签: heroku ruby-on-rails-4 icu

我在Rails 4应用程序中使用ruby gem charlock_holmes来检测我正在解析的CSV的字符编码,以便CSV.foreach不会抛出错误。

但是,当我尝试推送到heroku时(在Gemfile中使用gem 'charlock_holmes')我收到以下错误:

Installing charlock_holmes (0.6.9.4)
   Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

   /tmp/build_e741f6ed-a860-47bf-8c0d-1b678fa0ebeb/vendor/ruby-2.0.0/bin/ruby extconf.rb
   checking for main() in -licui18n... no
   checking for main() in -licui18n... no


   ***************************************************************************************
   *********** icu required (brew install icu4c or apt-get install libicu-dev) ***********
   ***************************************************************************************
   *** extconf.rb failed ***
   Could not create Makefile due to some reason, probably lack of necessary
   libraries and/or headers.  Check the mkmf.log file for more details.  You may
   need configuration options.

   Provided configuration options:
   --with-opt-dir
   --without-opt-dir
   --with-opt-include
   --without-opt-include=${opt-dir}/include
   --with-opt-lib
   --without-opt-lib=${opt-dir}/lib
   --with-make-prog
   --without-make-prog
   --srcdir=.
   --curdir
   --ruby=/tmp/build_e741f6ed-a860-47bf-8c0d-1b678fa0ebeb/vendor/ruby-2.0.0/bin/ruby
   --with-icu-dir
   --without-icu-dir
   --with-icu-include
   --without-icu-include=${icu-dir}/include
   --with-icu-lib
   --without-icu-lib=${icu-dir}/
   --with-icui18nlib
   --without-icui18nlib
   --with-icui18nlib
   --without-icui18nlib


   Gem files will remain installed in /tmp/build_e741f6ed-a860-47bf-8c0d-1b678fa0ebeb/vendor/bundle/ruby/2.0.0/gems/charlock_holmes-0.6.9.4 for inspection.
   Results logged to /tmp/build_e741f6ed-a860-47bf-8c0d-1b678fa0ebeb/vendor/bundle/ruby/2.0.0/gems/charlock_holmes-0.6.9.4/ext/charlock_holmes/gem_make.out
   An error occurred while installing charlock_holmes (0.6.9.4), and Bundler cannot
   continue.
   Make sure that `gem install charlock_holmes -v '0.6.9.4'` succeeds before
   bundling.

如何在Heroku上安装libicu-dev

4 个答案:

答案 0 :(得分:13)

尝试使用gem "charlock_holmes_bundle_icu", "~> 0.6.9.2"More info.

答案 1 :(得分:11)

编辑2017年6月:由于这个单一问题的定制一次性构建包似乎已过时,我建议尝试Benjie在this answer中提出的方法。使用带有Aptfile的heroku-buildpack-multi和heroku-buildpack-apt来指定依赖项。

史蒂夫·托克在这个问题上也有一篇很好的文章:http://tooky.co.uk/using-charklock_holmes-on-heroku/ - 请注意,自从提出这个问题以来,3年内事情可能已经发生了变化,但要记住的是通用/支持而不是特定/不支持,是使用buildpacks的最佳途径。

原始答案:

虽然Ryan's回答有效,但它也会减慢部署时间到我的测试中 - 最多15分钟。我甚至多次遇到Heroku的部署时限。

更简单的解决方案(不影响部署时间)是使用Heroku buildpack

Aaron Severs在dyno构建中创建了一个包含icu4c(charlock_holmes所依赖的)的buildpack。 [see here]

使其发挥作用的步骤(复制自Aaron对子孙后代的评论):

  1. 安装buildpack CLI: heroku plugins:install https://github.com/heroku/heroku-buildpacks
  2. 将buildpack设置为Aaron的fork heroku buildpacks:set frederick/heroku-buildpack-ruby -a myapp
  3. 在您的Gemfile中,使用:gem 'charlock_holmes'

答案 2 :(得分:2)

可悲的是,其他两个解决方案对我不起作用(见下文),所以我不得不想出自己的解决方案。此解决方案适用于Ruby 1.9.3,但hammady表示它不适用于2.0.0。

我使用heroku-buildpack-multi

heroku config:add BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git

使用以下.buildpacks

https://github.com/benjie/heroku-buildpack-apt
https://github.com/heroku/heroku-buildpack-ruby

这是Aptfile

libicu-dev
需要heroku-buildpack-apt BUNDLE_BUILD__CHARLOCK_HOLMES gem 'charlock_holmes'才能通过My fork导出BUNDLE_BUILD__CHARLOCK_HOLMES变量。在Gemfile中,您只需像往常一样引用frederick/heroku-buildpack-ruby,现在对我来说都很顺利。

如果有人能想出一种不涉及导出heroku-buildpack-ruby的方式,那么请告诉我!


Heroku's ENV_DIRs回答对我不起作用 - Heroku保释,因为捆绑安装步骤3分钟内不提供任何输出。 Ryan's回答引用了不再维护的{{1}} buildpack并且落后于官方{{1}}相当多,这是我无法接受的。

答案 3 :(得分:-2)

这有效:

执行以下命令并安装:

1. brew install erlang icu4c spidermonkey

2。 brew ln icu4c

这将安装所需的依赖项,然后尝试安装charlock_homes。