web-dev-qa-db-ja.com

Ruby virtualenvと同等?

Pythonユーティリティ virtualenv

基本的に、サンドボックス環境にPythonパッケージをインストールできるので、easy_install Djangoは、システム全体のsite-packagesディレクトリではなく、virtualenvで作成されたディレクトリに配置されます。

例えば:

$ virtualenv test
New python executable in test/bin/python
Installing setuptools...cd .........done.
$ cd test/
$ source bin/activate
(test)$ easy_install tvnamer
Searching for tvnamer
Best match: tvnamer 0.5.1
Processing tvnamer-0.5.1-py2.5.Egg
Adding tvnamer 0.5.1 to easy-install.pth file
Installing tvnamer script to /Users/dbr/test/bin

Using /Library/Python/2.5/site-packages/tvnamer-0.5.1-py2.5.Egg
Processing dependencies for tvnamer
Finished processing dependencies for tvnamer
(test)$ which tvnamer 
/Users/dbr/test/bin/tvnamer

RubyGemsにこのようなものはありますか?

156
dbr

[〜#〜] rvm [〜#〜] は、異なるRubyバージョンとその宝石など)をサンドボックス化できるため、virtualenvの動作に近い方法で動作します。

77
Van Nguyen

サンドボックス、RVM、rbenvのいずれも、アプリのgem依存関係のバージョンを管理しません。そのためのツールは bundler です。

  • Gemfile をアプリケーションの依存関係宣言として使用します
  • つかいます bundle installこれらの依存関係の明示的なバージョンを隔離された場所にインストールする
  • つかいます bundle execアプリケーションを実行します
63
pje

rbenv に言及している人はいないようです。

18
Xuan

sandbox が好きになると思います。

16
dylanfm

Gemを非ルートとしてのみインストールする必要がある場合は、GEM_HOME環境変数。次に、gemを実行します。

例えば:

$ export GEM_HOME=$HOME/local/gems
$ gem install rhc
14
mpb

Bundlerでこれを行う方法について説明します(RVMで使用します-RVMとRVMを管理し、グローバル宝石のデフォルトセット、Bundlerはプロジェクト固有の宝石を処理します)

bundler install --binstubs --path vendor

プロジェクトのルートでこのコマンドを実行すると、Gemfileからリストされたgemがインストールされ、ライブラリが./vendorに、実行可能ファイルが./binおよびすべてのrequiresに配置されます(bundle consoleまたはBundlerが必要)は、これらのexeおよびlibを参照します。

私のために働く。

14
iain

direnv をお勧めします。これは、シェル用の環境スイッチャーです。

各プロンプトの前に、現在のディレクトリと親ディレクトリに「.envrc」ファイルが存在するかどうかを確認します。ファイルが存在する(および認証されている)場合、bashサブシェルにロードされ、エクスポートされたすべての変数がdirenvによってキャプチャされ、現在のシェルで使用可能になります。

direnvの使用方法 Ruby-installで

+ Rubyインストール

これを~/.direnvrcに追加します

use_Ruby() {
  local Ruby_root=$HOME/.rubies/$1
  load_prefix "$Ruby_root"
  layout_Ruby
}

Ruby-install(brew install Ruby-install)をインストールし、多数のルビーをインストールします。

Ruby-install Ruby 1.9.3
Ruby-install Ruby 2.0.0
Ruby-install Ruby 2.2.0

そして、便宜上いくつかのシンボリックリンクを作成します。

ln -s .rubies/1.9 Ruby-1.9.3-p*
ln -s .rubies/2.0 Ruby-2.0.0
ln -s .rubies/2.2 Ruby-2.2.0

そして最後に、任意のプロジェクトの.envrc

use Ruby 2.0

これにより、すべてのgemがプロジェクトの.direnv/Rubyディレクトリの下に配置されます(gemを簡単に開くことができます)。 bundlerは、ラッパーバイナリを.direnv/binに配置します(これ以上bundle exec!)。

+ rbenv

use rbenvコマンドに.envrcコマンドを追加して、rbenvを使用することもできます。これによりrbenvがアクティブになり、RubyラッパーがPATHに配置されます。

これが機能するために.bashrcまたは.zshrcにrbenvをインストールする必要はないことに注意してください。

+ RVM

Rubyプロジェクトで使用する最も複雑な.envrcは次のとおりです。

rvm use 1.8.7
layout Ruby
PATH_add .direnv/bundler-bin

rvmは、正しいバージョンを選択するために使用されますRubyバージョン

レイアウトコマンドは、通常の環境変数の一部を自動的に設定します。今のところRubyレイアウトのみが存在します。GEM_HOME環境変数とそのbinディレクトリをパスに設定します。これはRubyバージョン必ず「rvm」の後に呼び出してください。各Rubyレイアウトディレクトリには独自のGEM_HOMEがあるため、rvmのgemsetsを使用する必要はありません。

PATH_addは、指定された相対パスを先頭に追加して展開します。その場合、これを使用して、bundle install --binstubs .direnv/bundler-binを使用して、自分のビンスクリプトからバンドラービンスタブを分離します。

これらのコマンドが正確に何をするのかを知りたい場合は、今のところ次のようにします。cat direnv stdlib |もっと少なく

4
Shin Kim

Mineshaft は、私がしばらく前から取り組んでいるプロジェクトであり、開発作業を続けています。

これは、virtualenvの動作に似た仮想環境を作成する機能と、Rubyをグローバルにインストールする機能の両方を提供します。

0
ctesterman