私は、Rubyがインターフェースできるように、Hunspellとhunspell-ffigemを使用するRailsアプリを構築しています。アプリをherokuにデプロイしていますが、残念ながら、gemを機能させるには、サーバーにHunspellをインストールする必要があります。
HunspellをHerokuにインストールする方法はありますか?または、EC2に移行する必要がありますか?
前もって感謝します :)
私は、Rubyがインターフェースできるように、Hunspellとhunspell-ffigemを使用するRailsアプリを構築しています。アプリをherokuにデプロイしていますが、残念ながら、gemを機能させるには、サーバーにHunspellをインストールする必要があります。
HunspellをHerokuにインストールする方法はありますか?または、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アカウントを持っていることを確認する必要があります。ビルド出力がないステップ6でエラーが発生した場合は、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/
お気に入りのHunspellgemをインストールします。私はhunspell-ffiを使用します。Hunspellには新しい宝石がありますが、私は以前のFFI宝石を好みます。使用するには、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
このURLをチェックアウトしてください:http://gems-summary.heroku.com/2011-07-19
Herokuがgemコミュニティに対してどれほどのサポートを提供しているかは驚くべきことです。つまり、Hunspellはrubygemsを使用しているため、gemをバンドルに追加し、バンドルをインストールしてからデプロイするだけです。
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にインストールされない特定の宝石については、サポートチケットを送信してください。」
AFAIK、アプリがスピンアップされると、Gemfile内のgemは、アプリがスピンアップされたサーバーにオンザフライでインストールされます。
Aspenスタックにはプレインストールされたgemがありますが、プレインストールされていないgemを追加できるはずです。
バンブースタックにはプリインストールされたgemがないため、すべてのgem依存関係を明示的に宣言する必要があります。それはセラドンスタックでも同じだと思います。