2

Ruby で記述された小さなコマンドライン アプリケーションをデプロイしようとしています。アプリケーションが依存する gem の多くは、私の github アカウントでホストされています。それらの場所をGemfile適切に指定しました。デプロイ マシンでリポジトリのクローンを作成しbundle install、ルートから実行すると、すべてがスムーズに進みます。次に、コマンド ライン アプリ (「hippo」という名前) をbin/hippo. $PATHアプリをシステムにインストールして、実行可能ファイルを使用するためにパッチを適用したり、実行可能ファイルへのパスを指定したりする必要がないようにしたいと考えています。

を実行するgem install /path/to/my/.gem/fileと、インストールが失敗し、Github アカウントでホストされている個人の gem への依存関係を解決できないと表示されます。これは、gem installコマンドが を読み取らずGemfile、 のみを読み取りgemspec(バンドラーの人々は、なぜファイルGemfileの代わりにBundleFileまたは何かの名前を付けたのですか?)、gem の場所が で指定されているためGemfileです (ポイントする方法はありません)。 gemspec の github gem ですよね?)。rake installbundle-scaffolded gem に付属するタスクを使用すると、同じ問題が発生します。ただし、実行するとbundle exec gem install /path/to/my/gemfileこれは、バンドラーによって変更されたロード パスで私の gem を確認し、それらが既にインストールされていると判断するためだと思います。しかし、実行可能ファイルを実行しようとすると、必要なときに依存関係が見つからないため失敗します。require bundler/setup(実行可能ファイルには、シバンの後の最初の行があることに注意してください)。

だから私は尋ねます:bundlerを使って、rubygemsでホストされていないgemに依存するコマンドラインアプリケーションをデプロイする良い方法は何ですか?

4

1 に答える 1

1

bundle execロード パスを正しく設定して、require bundler/setup. 1 つのオプションは、バイナリを常に で実行することbundle exec bin/hippoです。

を実行すると、プロジェクトのディレクトリ内にファイルbundle install --standaloneが生成されます。bundle/bundler/setup.rbそのファイルはロード パスを正しく設定するのでrequire_relative '../bundle/bundler/setup'require 'bundler/setup'.

于 2013-06-21T02:47:31.933 に答える