13

ネイティブ拡張機能(この特定の場合はNokogiri)を持つgemに依存するrubyアプリケーションがあります。ただし、さまざまな理由により、そのgemのビルド前提条件(build-essential、libxslt-dev、ruby-devなど)を本番ホストにインストールすることはできません。

事前に構築されたネイティブ拡張機能を使用してgemを再パッケージ化する(標準?)方法はありますか?

可能であるはずですが(Windowsでこれを行うのはかなり標準的なようです)、このテーマに関するドキュメントが見つかりません。

すべてのシステムライブラリの既知のバージョン(Ubuntu 9.04サーバー64ビット、Ruby 1.8.7)を使用して、単一のプラットフォームのみをサポートする必要があることに注意してください。

更新:私たちはBundlerを使用しているので、debianパッケージではなく、 1日の終わりにインストールするgemが必要です。

4

2 に答える 2

21

最後に、C拡張機能(ほとんどの場合)を構築するためにrake-compilerを使用するgemに対してこれを行う方法を見つけました。

デプロイ先のマシンと同じマシンで次のことを行う必要があります。そうしないと、単に機能しません。

C拡張機能をビルドするためのビルド前提条件をインストールします。

# apt-get install build-essentials ruby-dev # ... etc
# gem install rake-compiler

再構築する宝石を開梱します。

$ gem unpack nokogiri

光沢のある新しいプリコンパイル済みgemを作成します。

$ rake native gem

これで、ビルドツールがインストールされていないマシンにネイティブgemをインストールできます。

$ gem install pkg/nokogiri-1.4.3.1-x86-linux.gem 
Successfully installed nokogiri-1.4.3.1-x86-linux
1 gem installed
于 2010-10-10T20:37:19.017 に答える
-1

ビルドマシン

すべてのgemの正しくプラットフォーム化されたバージョンを既にキャッシュするには、すべてのgemをvendor/cache同じマシンにパッケージ化します。

$ bundle package --all

生産機

すでにキャッシュされているすべてのgem依存関係をインストールします。これには、gemキャッシュを使用して正しくプラットフォーム化されたバージョンが必要です。

$ bundle install --local --deployment
于 2014-02-17T16:38:02.357 に答える