0

我正在构建一个使用 Hunspell 和 hunspell-ffi gem 的 Rails 应用程序,以便 Ruby 可以与之交互。我正在将应用程序部署到 heroku,但不幸的是,它需要在服务器上安装 Hunspell 才能使 gem 工作。

我有什么办法可以在 Heroku 上安装 Hunspell?还是我必须迁移到 EC2?

提前致谢 :)

4

4 回答 4

3

您需要构建所需的 Hunspell 库并将其直接包含在您的 Heroku 项目中。

Heroku 在 64 位 Ubuntu 上运行,因此必须在该系统下编译二进制文件。最好的方法是简单地使用Heroku 的 Vulcan 构建服务器在 Heroku 实例上进行编译。

为 Heroku 编译

  1. gem install vulcan
  2. vulcan create vulcan-compile-me最后一个参数是您自己的应用名称。
  3. 下载 Hunspell 源代码
  4. 提炼
  5. vulcan build -v -s ./hunspell-1.3.2告诉 Vulcan 构建它并自动将完成的产品下载到 /tmp/hunspell..

构建服务器需要 cloudant 插件,这是自动安装的,但您必须确保拥有经过验证(添加信用卡)的 Heroku 帐户。如果您在没有构建输出的第六步中遇到错误,请执行heroku addons:add cloudant --app vulcan-compile-me

添加到您的项目

  1. 从 /tmp 中提取 Heroku Vulcan 构建 tar
  2. 将整个lib文件夹复制到项目根目录下的vendor/hunspell
  3. 告诉 Heroku 在哪里寻找库:heroku config:add LD_LIBRARY_PATH=vendor/hunspell/lib.

安装字典

从 Open Office 下载一些字典并将它们添加到您的项目中。一个好的位置是在根级别称为字典的文件夹。然后在 Ruby 中初始化 Hunspell 时会引用此路径。

http://extensions.services.openoffice.org/dictionary

ftp://sunsite.informatik.rwth-aachen.de/pub/mirror/OpenOffice/contrib/

使用

安装你最喜欢的 Hunspell gem,我使用hunspell-ffiHunspell有一个较新的 gem,但我更喜欢以前的 FFI gem。使用字典文件夹路径和语言(语言与字典文件名匹配)初始化 Hunspell 对象。

dict = Hunspell.new("dictionaries", "en_US")

if dict.check('caribean') == false
    suggestions = dict.suggest('caribean')
    if (suggestions.size)
        correction = suggestions.first # returns 'caribbean'
    end
end

为更复杂的项目供应商

您还可以通过将第一步中由 Vulcan 服务器构建的 tar 放入公共可访问服务器(例如 Google Storage)中,然后更改 Heroku 构建包以在每次实例启动时下载 tar,将库供应到您的项目中。

  1. heroku config:set BUILDPACK_URL=https://github.com/peterkeen/heroku-buildpack-vendorbinaries.git
  2. 供应商构建包在根级别查找.vendor_urls文件,其中包含指向要安装的 tar 球的 HTTP 链接(需要以新行结尾才能工作)。 http://commondatastorage.googleapis.com/developer.you.com/hunspell-heroku-1.3.tgz
  3. 供应商将 tar 解压缩到根文件夹中,因此 Heroku 设置的 lib 路径将只是“lib”。heroku config:add LD_LIBRARY_PATH=lib
于 2013-02-12T09:51:06.160 回答
0

查看此网址: http: //gems-summary.heroku.com/2011-07-19

Heroku 对 gem 社区的支持之多令人惊讶。因此,您需要做的就是将 gem 添加到您的包中,因为 Hunspell 在 ruby​​gems 上,安装包,然后部署。

Gemfile

source 'http://rubygems.org'
gem 'rails', '3.0.5'
gem 'hunspell'

然后添加到 git:

git add .
git commit -m 'added hunspell'

然后捆绑:

bundle

并部署:

 git push heroku
于 2011-08-14T20:28:04.803 回答
0

除非我弄错了或发生了某些变化(我找不到任何证据),否则您无法在 Heroku 上安装外部本机库。如果该库尚未安装(我认为对于 ImageMagick 和其他人来说就是这种情况),您将无法使用 gem。

于 2011-08-14T20:43:08.840 回答
-1

使用 Bundler,您应该能够安装任何 gem。根据http://devcenter.heroku.com/articles/how-do-i-install-gems-for-my-app的说法,“几乎任何 gem - 即使是那些具有本机依赖项的 - 都可以使用 Bundler 安装。如果有无法在 Heroku 上安装的特定 gem,请提交支持票。”

AFAIK,当您的应用程序启动时,Gemfile 中的 gem 会即时安装到您的应用程序启动的服务器上。

Aspen 堆栈已预装 gem,但您仍然应该能够添加未预装的 gem。

竹栈没有预先安装的 gem,所以所有的 gem 依赖项都必须显式声明。我相信青瓷堆栈也是如此。

于 2011-08-16T20:18:50.347 回答