我在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
?
答案 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来指定依赖项。
原始答案:
虽然Ryan's回答有效,但它也会减慢部署时间到我的测试中 - 最多15分钟。我甚至多次遇到Heroku的部署时限。
更简单的解决方案(不影响部署时间)是使用Heroku buildpack
Aaron Severs在dyno构建中创建了一个包含icu4c(charlock_holmes
所依赖的)的buildpack。 [see here]
使其发挥作用的步骤(复制自Aaron对子孙后代的评论):
heroku plugins:install https://github.com/heroku/heroku-buildpacks
heroku buildpacks:set frederick/heroku-buildpack-ruby -a myapp
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。