5

開発ツールがインストールされていない実稼働サーバーに、いくつかの ruby​​ gem (すべて C 拡張機能付き) をインストールする必要があります。最初に開発サーバーで gem をビルドしてから、生成されたネイティブ gem を再パッケージ化して運用サーバーにインストールしたいと考えています。

ただし、再配布用のネイティブ拡張機能を使用して gem をパッケージ化する標準的な方法はないようです。私はrake-compilerを知っていますが、関係するgemのどれもそのままでは動作しません。具体的には、json-1.7.5、rb-inotify-0.8.8、および ffi-1.2.1 の gem を使用しています。

このタスクを実行する方法や、この件に関するドキュメントについての指針をいただければ幸いです。

4

3 に答える 3

2

Jordan Sissel のfpmを使用すると、さまざまな入力アーカイブ (gem を含む) を取得し、それらを (とりわけ) DEB または RPM としてコンパイルおよびパッケージ化できます。

json gem を deb パッケージにコンパイルする例は次のとおりです。

cd /tmp
fpm -s gem -t deb json

これにより、json gem の最新バージョンがダウンロードされ、サーバーにインストールできるrubygem-json-1.5.7-1.amd64.debアーカイブが作成されます。/tmpコンパイルボックスと最終サーバーはかなり同一である必要があることに注意してください。少なくともディストリビューションとビット数、ruby のバージョンとそのファイル レイアウト、および利用可能なロード可能なライブラリは同じである必要があります。基本的に、上流のディストリビューションが扱うすべての制約...

そうは言っても、長期的には、ターゲットサーバーにコンパイラをインストールして、サーバーでrbenvまたはrvmを使用する方がはるかに簡単であることがわかりました. ほとんどの小規模および中規模のインストールでは、すべてを事前にコンパイルしてサーバーに出荷する必要がないため、処理がはるかに簡単です。

于 2012-12-19T00:05:14.810 に答える
0

これが機能するには、ほぼ同じシステムでそれらを構築する必要があります。別の場所にある、またはバージョンがわずかに異なる共有ライブラリに対してリンクしている場合、まったく機能しない可能性があります。場合によっては、さまざまなバージョンで動作する場合がありますが、これは保証できません。

まさにこの理由から、ネイティブ拡張機能をパッケージ化する方法はありません。ライブラリの可能な組み合わせが多すぎるだけです。

また、必要に応じて 32 ビットまたは 64 ビットを含め、同じアーキテクチャを使用していることを確認する必要があります。

運が良ければ、これらをインストールできるOS用のパッケージがありますが、これらはrvmまたはでは機能しませんrbenv

于 2012-12-18T22:32:18.263 に答える