2

私はどのようbundle execに機能し、それが何をするのかを理解しようとしています。bundle install次のように使用して宝石をインストールしました:

bundle install --binstubs ./bundle/bin --path ./bundle/lib'

./bundle/bin/thinこれにより、次のように使用して Rails アプリケーションを開始するために使用できるスクリプトが作成されますthin

./bundle/bin/thin start -p 8080

ただし、インターネット上のほとんどの記事では、次のbundle execように使用して薄く始めることを推奨しています。

bundle exec thin start -p 8080

2つの違いは何ですか?私のテストでは、スクリプトをbundle exec呼び出さないことが示されていますが、スクリプトとの違いは何ですか?./bundle/bin/thinbundle exec

4

3 に答える 3

3

大きな違いはありません。これらは同じことを達成するための 2 つの方法です。つまり、バンドルに適したバージョンのコマンドを実行し、バンドルされている他の gen をコマンドで確実にロードできるように環境を設定します。選択は利便性の問題になります。

の利点bundle execは、それを使用するために binstub を生成する必要がないことです。既存の Gemfile で動作するだけです。これは、あなたが持っている binstub を呼び出すのを見ない理由を説明しています。

一部の人々はbundle exec、すべてのコマンドの前に入力する必要があることを好まないため、binstubs の目標は、ディレクトリを PATH の先頭に追加して、コマンドを通常どおり呼び出すことができるようにすることです。欠点は、バンドルされた gem に重要なシステム コマンド (例: ls) を隠すコマンドが含まれている場合、セキュリティや使いやすさに潜在的な懸念があることです。

それを PATH に入れず、常に として呼び出す場合bundle/bin/thin、セキュリティ上の懸念はありませんが、 を使用するよりも特に利点はありませんbundle exec thin

于 2013-08-02T06:47:08.200 に答える
1

その特定のケースでは、違いはありません。bundle exec thin start -p 8080を呼び出すこと.bundle/bin/thinになりますが、別のパスに binstubs をインストールした場合はどうなるでしょうか? あなたのbinstubsフォルダがどこにあるかを見つけるためにあなたをbundle exec thin start読んでください。.bundle/configbinstubs がインストールされておらず、thin の 3 つのバージョンがインストールされていると言う場合bundle exec、Gemfile で定義されているバージョンが実行されます。

編集:@tadmanは、私が最初に見逃した良い点も指摘しました。を使用するbundle execと、Gemfile の gem 環境が使用されます。それがないと、現在インストールされている各 gem の最新バージョンがロードされます。

于 2013-08-01T20:57:22.347 に答える
0

bundle execメソッドは、それを行う「公式」の方法です。珍しい機能を利用したい場合は--binstubs、できます。

./bundle/bin/thinこれはスクリプトではなく、適切なbundle exec環境がロードされたスクリプトを呼び出すラッパーまたは「スタブ」であることを忘れないでください。

于 2013-08-01T20:57:26.563 に答える