【问题标题】:Using Hunspell With Heroku在 Heroku 中使用 Hunspell
【发布时间】:2013-02-12 17:51:06
【问题描述】:

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

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

提前致谢:)

【问题讨论】:

    标签: ruby-on-rails heroku spell-checking hunspell


    【解决方案1】:

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

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

    为 Heroku 编译

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

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

    添加到您的项目

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

    安装字典

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

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

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

    使用

    安装你最喜欢的 Hunspell gem,我使用hunspell-ffi。有一个newer gem for Hunspell,但我更喜欢以前的 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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        查看此网址: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
        

        【讨论】:

        • 这没有回答问题。 Hunspell 宝石 still requires libhunspell.
        【解决方案4】:

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

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

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

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

        【讨论】:

        • -1,因为您仍然需要 Heroku 上不存在的 hunspell 二进制文件,这是 OP 的问题
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-31
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多