6

我在 Rails 4 应用程序中使用 ruby​​ gem charlock_holmes来检测我正在解析的 CSV 的字符编码,这样CSV.foreach就不会引发错误。

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

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.

如何libicu-dev在 Heroku 上安装?

4

4 回答 4

13

尝试使用gem "charlock_holmes_bundle_icu", "~> 0.6.9.2". 更多信息。

于 2013-09-20T22:50:09.187 回答
11

编辑 2017 年 6 月:由于针对这个单一问题的自定义一次性构建包似乎已经过时,我建议尝试 Benjie 在这个答案中提出的方法。使用带有 an 的heroku-buildpack-multi 和heroku-buildpack-aptAptfile来指定依赖项。

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

原答案:

虽然Ryan 的答案有效,但它也将部署时间减慢到 - 在我的测试中 - 最多 15 分钟。我什至几次遇到 Heroku 的部署时间限制。

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

Aaron Severs 在 dyno 构建中创建了一个包含 icu4c(charlock_holmes依赖于)的构建包。[看这里]

使其工作的步骤(从 Aaron 的后代评论中复制):

  1. 安装 buildpack CLI: heroku plugins:install https://github.com/heroku/heroku-buildpacks
  2. 将 buildpack 设置为 Aaron 的 forkheroku buildpacks:set frederick/heroku-buildpack-ruby -a myapp
  3. 在您的 Gemfile 中,使用:gem 'charlock_holmes'
于 2013-12-10T23:41:01.547 回答
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

我的 forkheroku-buildpack-apt需要BUNDLE_BUILD__CHARLOCK_HOLMES通过Heroku的ENV_DIRs导出变量。在 Gemfile 中,您gem 'charlock_holmes'照常引用,现在对我来说一切正常。

如果有人能想到不涉及导出的方法,BUNDLE_BUILD__CHARLOCK_HOLMES请告诉我!


Ryan 的回答对我不起作用——Heroku 放弃了,因为捆绑安装步骤在 3 分钟内没有提供任何输出。Silasj 的回答引用了frederick/heroku-buildpack-ruby不再维护的 buildpack,并且在相当程度上落后于官方heroku-buildpack-ruby,这对我来说是不可接受的。

于 2014-03-26T13:44:23.763 回答
-2

这有效:

执行以下命令并安装它:

1. brew install erlang icu4c spidermonkey

2.冲泡ln icu4c

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

于 2015-06-25T00:36:08.733 回答