sil*_*son 6 heroku icu ruby-on-rails-4
我在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.
Run Code Online (Sandbox Code Playgroud)
如何libicu-dev在Heroku上安装?
sil*_*son 11
编辑2017年6月:由于这个单一问题的定制一次性构建包似乎已经过时,我建议尝试Benjie在这个答案中提出的方法.使用Heroku的-buildpack的多和Heroku的-buildpack,容易与Aptfile指定依赖.
Steve Tooke在这个问题上也有一篇很好的文章:http://tooky.co.uk/using-charklock_holmes-on-heroku/ - 请注意,自从提出这个问题以来,3年内事情可能发生了变化,但要记住的是,通用/支持,而不是特定/不支持,是使用buildpacks的最佳途径.
原答案:
虽然Ryan的答案有效,但它也会减慢部署时间 - 在我的测试中 - 最多15分钟.我甚至多次遇到Heroku的部署时限.
一个更简单的解决方案(不影响部署时间)是使用Heroku buildpack
Aaron Severs在dyno charlock_holmes构建中创建了一个包含icu4c(依赖于)的buildpack .[看这里]
使它成功的步骤(复制自亚伦对子孙后代的评论):
heroku plugins:install https://github.com/heroku/heroku-buildpacksheroku buildpacks:set frederick/heroku-buildpack-ruby -a myappgem 'charlock_holmes'遗憾的是,其他两个解决方案对我不起作用(见下文),所以我不得不提出自己的解决方案。该解决方案适用于 Ruby 1.9.3,但hammady表示它不适用于 2.0.0。
我用了heroku-buildpack-multi:
heroku config:add BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git
Run Code Online (Sandbox Code Playgroud)
具有以下内容.buildpacks:
https://github.com/benjie/heroku-buildpack-apt
https://github.com/heroku/heroku-buildpack-ruby
Run Code Online (Sandbox Code Playgroud)
和这个Aptfile:
libicu-dev
Run Code Online (Sandbox Code Playgroud)
我的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相当多,这对我来说是不能接受的。
| 归档时间: |
|
| 查看次数: |
5680 次 |
| 最近记录: |