我正在构建一个使用 Hunspell 和 hunspell-ffi gem 的 Rails 应用程序,以便 Ruby 可以与之交互。我正在将应用程序部署到 heroku,但不幸的是,它需要在服务器上安装 Hunspell 才能使 gem 工作。
我有什么办法可以在 Heroku 上安装 Hunspell?还是我必须迁移到 EC2?
提前致谢 :)
我正在构建一个使用 Hunspell 和 hunspell-ffi gem 的 Rails 应用程序,以便 Ruby 可以与之交互。我正在将应用程序部署到 heroku,但不幸的是,它需要在服务器上安装 Hunspell 才能使 gem 工作。
我有什么办法可以在 Heroku 上安装 Hunspell?还是我必须迁移到 EC2?
提前致谢 :)
您需要构建所需的 Hunspell 库并将其直接包含在您的 Heroku 项目中。
Heroku 在 64 位 Ubuntu 上运行,因此必须在该系统下编译二进制文件。最好的方法是简单地使用Heroku 的 Vulcan 构建服务器在 Heroku 实例上进行编译。
gem install vulcan
vulcan create vulcan-compile-me
最后一个参数是您自己的应用名称。vulcan build -v -s ./hunspell-1.3.2
告诉 Vulcan 构建它并自动将完成的产品下载到 /tmp/hunspell..构建服务器需要 cloudant 插件,这是自动安装的,但您必须确保拥有经过验证(添加信用卡)的 Heroku 帐户。如果您在没有构建输出的第六步中遇到错误,请执行heroku addons:add cloudant --app vulcan-compile-me
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-ffi。Hunspell有一个较新的 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,将库供应到您的项目中。
heroku config:set BUILDPACK_URL=https://github.com/peterkeen/heroku-buildpack-vendorbinaries.git
heroku config:add LD_LIBRARY_PATH=lib
查看此网址: http: //gems-summary.heroku.com/2011-07-19
Heroku 对 gem 社区的支持之多令人惊讶。因此,您需要做的就是将 gem 添加到您的包中,因为 Hunspell 在 rubygems 上,安装包,然后部署。
Gemfile
source 'http://rubygems.org'
gem 'rails', '3.0.5'
gem 'hunspell'
然后添加到 git:
git add .
git commit -m 'added hunspell'
然后捆绑:
bundle
并部署:
git push heroku
除非我弄错了或发生了某些变化(我找不到任何证据),否则您无法在 Heroku 上安装外部本机库。如果该库尚未安装(我认为对于 ImageMagick 和其他人来说就是这种情况),您将无法使用 gem。
使用 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 依赖项都必须显式声明。我相信青瓷堆栈也是如此。